質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.53%

  • C#

    7066questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity3D

    1283questions

    Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity エクセルへの書き込みについて2

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 108

Fuku78

score 2

C#初心者です。

前回の質問と似ていますが、別のソースにてエクセルの書き込み次に問題が起こっています。
下記のように、一つ空白のマスがあって次のものが書き込みされています。

0
(空白)
0
(空白)

これを

0
0

と空白を無くして書き込みたいです。

問題のソース

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEditor;
using System.Collections;
using System.IO;
using System;
using System.Text;


public class countright: MonoBehaviour {

    private Text CountTextR;
    private int CountR;
    private int OldCountR;

    // Use this for initialization
    void Start () {
        CountTextR = GetComponentInChildren<Text>();
        OldCountR = 0;
        CountR = 0;

      /* StreamWriter swR = new StreamWriter(@"saveDataR7.csv", true, Encoding.GetEncoding("Shift_JIS"));
        string[] sR1 = { "右カウント" };
        string sR2 = string.Join(",", sR1);
        swR.WriteLine(sR2);*/
    }

    int endR = 0;
    // Update is called once per frame
    void Update () {
        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            endR = 1;
            CountR++;
            //Debug.Log("右矢印");
            if (OldCountR != CountR)
            {
                CountTextR.text = CountR.ToString("0");
            }
            OldCountR = CountR;
        }

        StreamWriter swR = new StreamWriter(@"saveDataR8.csv", true, Encoding.GetEncoding("Shift_JIS"));

        string[] strR = {""+(CountTextR.text) };
        string strR2 = string.Join(",", strR);
        swR.WriteLine(strR2);

        swR.Close();

        if (endR == 1)
        {
            EditorApplication.Exit(0);
            //Application.Quit();
        }
    }
}

自分が間違えを探すのが下手なのもありますが、下記のはほぼ同じソースで空白なしで書き込まれます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEditor;
using System.Collections;
using System.IO;
using System;
using System.Text;

public class countleft : MonoBehaviour
{

    private Text CountTextL;
    private int CountL;
    private int OldCountL;


    // Use this for initialization
    void Start()
    {
        CountTextL = GetComponentInChildren<Text>();
        OldCountL = 0;
        CountL = 0;

       /* StreamWriter swL = new StreamWriter(@"saveDataL6.csv", true, Encoding.GetEncoding("Shift_JIS"));
        string[] sL1 = { "左カウント" };
        string sL2 = string.Join(",", sL1);
        swL.WriteLine(sL2);*/

    }



    int endL = 0;
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            endL = 1;
            CountL++;
            //Debug.Log("左矢印");
            if (OldCountL != CountL)
            {
                CountTextL.text = CountL.ToString("0");
            }
            OldCountL = CountL;
           // Application.Quit();

        }
        StreamWriter swL = new StreamWriter(@"saveDataL9.csv", true, Encoding.GetEncoding("Shift_JIS"));

        string[] strL = {""+(CountTextL.text) };
        string strL2 = string.Join(",", strL);
        swL.WriteLine(strL2);

        swL.Close();

        if (endL == 1)
        {
            EditorApplication.Exit(0);
            //Application.Quit();
        }
    }
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • sakura_hana

    2018/07/06 13:38

    >Fuku78さん CountTextR.textの初期値(インスペクタ上での値)は何ですか? そちらが「(改行)0」になっていたりしませんか?

    キャンセル

  • Fuku78

    2018/07/06 14:33

    インスペクタ上で、「0(改行)」になっていました。改行を消したところ空白が消えて、エクセルに綺麗に書き込まれました。ありがとうございます。

    キャンセル

  • Wind

    2018/07/06 14:46

    >sakura_hanaさん 右矢印が押されなければ0が保存され続けるのですね。失礼しました。

    キャンセル

回答 1

+1

自己解決した(CountTextR.textの初期値に改行が入っていた)
とのことですが、せっかくなので考え方(問題の見付け方)記載しておきます。

  • 右矢印キーが押されようが押されまいがCountTextR.textの値が書き出され続ける。
  • 右矢印キーが押されるとCountTextR.textの中身が書き換えられる(数字が増えていく)。
  • 右矢印キーが一度も押されていない状態ならCountTextR.textの初期値が表示される。
  • CountTextR.textの初期値はプログラム上で設定されていない=インスペクターの値がそのまま使われる。

ここまでがコードから読み取れるので、
じゃあ「CountTextRのTextコンポーネントの初期値に改行が入っているのでは?」という発想でした。

つまり「どこまでは想定通りで、どこが想定通りではないのか」を切り分けていくと原因の発見に繋がります。

Debug.Log(CountTextR.text);とかやると、「そもそもCountTextR.textの中身がおかしい」のか「書き出した時に余計な文字が入ってしまった」のか、などの問題の切り分けがしやすくなるので、こちらもオススメです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C#

    7066questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity3D

    1283questions

    Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。