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

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

新規登録して質問してみよう
ただいま回答率
85.51%
C#

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1723閲覧

テキストを読み込めない

lkiuxc

総合スコア29

C#

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/01/12 04:26

編集2019/01/12 05:21

こんにちは。
Unityにてテキストを読み込む処理を書いていたのですが、エラーが出て直せないため質問させていただきます。
現在原因不明です。
こちらがソースになります。

using System.Collections; using System.Collections.Generic; using UnityEngine; public class ReadingMusic : MonoBehaviour { private string[] textMessage; private string[,] textWords; private int rowLength; private int columnLength; private void Start() { TextAsset textasset = new TextAsset(); textasset = Resources.Load("TestText", typeof(TextAsset)) as TextAsset; string TextLines = textasset.text; textMessage = TextLines.Split('\n'); columnLength = textMessage[0].Split('\'').Length; rowLength = textMessage.Length; textWords = new string[rowLength, columnLength]; for (int i = 0; i < rowLength; i++) { string[] tempWords = textMessage[i].Split('\''); for (int n = 0; n < columnLength; n++) { textWords[i, n] = tempWords[n]; } } } }

そして、こちらがテキストになります。

1'A'5

よろしくお願いします。
追記:エラーメッセージ
IndexOutOfRangeException: Index was outside the bounds of the array.
ReadingMusic.Start () (at Assets/Scripts/ReadingMusic.cs:31)

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2019/01/12 04:30

エラーの内容を追記いただけないものでしょうか
y_waiwai

2019/01/12 04:50

エラーメッセージをそのまま提示しましょう
lkiuxc

2019/01/12 05:21

申し訳ありません。追記しました。
guest

回答1

0

ベストアンサー

エラーメッセージにat Assets/Scripts/ReadingMusic.cs:31と書いてあります。
つまり「ReadingMusic.csの31行目にエラーがありますよ」ということです。

同じくエラーにはIndex was outside the bounds of the array.とあります。
つまり「インデックスが配列の範囲外だった。」ということです。

インデックスとは何ぞや?というと、配列の何番目かを指定している場所、
つまりtextMessage[i]iの部分です。
例えば配列の中身の個数が10個しかないのにtextMessage[10]と書いたらこのエラーが出ます。
textMessage[0]〜textMessage[9]しか存在しない為)


で、問題の箇所は以下っぽいです。(ざっくり数えただけなんで行がズレてたら申し訳無い)
textWords[i, n] = tempWords[n];

直前でtextWords = new string[rowLength, columnLength];と定義していて、
iは0〜rowLength-1、nは0〜columnLength-1を取るのでtextWordsの方は問題無さそう。
ということはtempWords[n]が問題っぽいです。

nつまりcolumnLengthはcolumnLength = textMessage[0].Split('\'').Length;
tempWordsはtextMessage[i].Split('\'')
ですから、textMessage[0]とそれ以外の時で、Split後の個数が違ったらエラーが起こる訳です。

多分読み込んでるテキストファイルには最後に改行が入っているんじゃないかと思います。確認してみてください。

投稿2019/01/12 05:56

sakura_hana

総合スコア11425

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lkiuxc

2019/01/12 10:28

ありがとうございます。見事解決しました。 成程、最後に改行を挟んだのが原因だったんですね。気付かなかった・・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問