1

ファイル (テキストアセット) を 1 行ずつ読み取って結果を取得するのに問題があります。

読み込もうとしているファイルは次のとおりです。

AUTHOR
COMMENT 
INFO      1  X   ARG  0001       0.581   2.180   1.470
INFO      2  X   ARG  0001       1.400   0.974   1.724
INFO      3  X   ARG  0001       2.553   0.934   0.751
INFO      4  X   ARG  0001       3.650   0.494   1.053
INFO      5  X   ARG  0001       1.188   3.073   1.532
INFO      6  X   ARG  0001       2.312   1.415  -0.466
INFO      7  X   ARG  0001      -0.232   2.249   2.180
END

私が使用しているコードは次のとおりです。

//read file
string[] line = file.text.Split("\n"[0]);

for(int i = 0 ; i < line.Length ; i++)
{
    if(line[i].Contains("INFO"))
    {
        //To replace all spaces with single underscore "_" (it works fine)
        string l = Regex.Replace(line[i]," {2,}","_");

       //In this Debug.Log i get correct results
       //For example "INFO_1_X_ARG_0001_0.581_2.180_1.470"
       Debug.Log(l);
       string[] subline =  Regex.Split(l,"_");
       //Only for first "INFO" line i get correct results (INFO,1,X,ARG,0001,0.581,2.180,1.470)
       //For all other "INFO" lines i get incomplete results (first,fourth and fifth element are not put into substrings
       //like they are dissapeard!
       foreach(string s in subline){Debug.Log(s);}
    }
}

説明:

最初にテキストを行に分割し(正常に動作します)、次に含む行のみを読み取りますINFO

すべてのスペースを含むすべての行をループしINFO、すべてのスペースをアンダースコアに置き換えます_(これは正常に機能します)

INFOアンダースコアに基づいて部分文字列に含まれる行を分割します_

行を印刷すると、最初の行だけINFOがすべての部分文字列を持っているように見えますが、次の行ごとに正しく分割されていません (最初の部分INFOと 3 番目の文字列は省略されています)

とても頼りにならないようです。これは、これらのことを行う方法ですか?どんな助けでも大歓迎です!これは簡単なはずですが、何が間違っていますか?

編集:

このコードには何か問題があります (単純なはずですが、機能しません)。

更新されたコードは次のとおりです(すべての部分文字列を作成しList<string> list = new List<string>()てコピーしました。リストの内容がインスペクターに表示されるように、unity3Dを使用しています。すべての部分文字列を適切に抽出したが、単純であることにショックを受けました

foreach(string s in list)
 Debug.Log(s);

確かにいくつかの値がありませんでした。だから私はさまざまなこととこのコードを試していました:

for(int x = 0; x < list.Count ; x++)
{
  Debug.Log("List: " + x.ToString() + " " + list[x].ToString());
}

リストの内容を適切に表示しますが、このコード (削除したばかりであることに注意してくださいx.ToString()) にはリスト内のいくつかの要素がありません。読みたくない!

for(int x = 0; x < list.Count ; x++)
  Debug.Log("List: " + list[x].ToString());

だから私はここで何が起こっているのかわからない?!

4

4 に答える 4

0

以下は私のために働いているようです:

using (var fs = new FileStream(filePath, FileMode.Open))
using (var reader = new StreamReader(fs))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        if (line.StartsWith("INFO"))
        {
            line = Regex.Replace(line, "[ ]+", "_");
            var subline = line.Split('_');

            foreach (var str in subline)
            {
                Console.Write("{0} ",str);
            }
            Console.WriteLine();
        }

    }

}
于 2013-06-10T18:10:51.127 に答える
0

次のようなことを試してみてください。

for (int i = 0; i < line.Length; i++)
{
    if (line[i].Contains("INFO"))
    {
        string l = Regex.Replace(line[i], @"\p{Zs}{2,}|\t+", "_");

        string[] sublines = l.Split('_');

        // If you want to see the debug....
        sublines.ForEach(s => Debug.Log(s));
    }
}

は、\p{Zs}すべての Unicode 区切り文字/スペース文字 (スペース、非改行スペースなど) に一致します。次のリファレンスが役立つ場合があります: Character Classes in Regular Expressions

于 2013-06-10T16:29:05.730 に答える