0

分割文字列について質問があり、それを DataTable に入れます。2 番目の配列が文字列か数値かを知るにはどうすればよいですか?

次のような多くの文字列を含むテキストがあります。

 text : ...
        abc 123 def 1 \"ok lo\" ;
        abc def 1 \"ok lo\" ;
        ...

配列 2:

 tmpList[0] = abc
 tmpList[1] = 123
 tmpList[2] = def
 tmpList[3] = 1 \"ok lo\"

配列1:

 tmpList[0] = abc
 tmpList[1] = def
 tmpList[2] = 1 \"ok lo\

abc で始まるすべての文字列を検索するには、次のようにしました。

        StreamReader fin = new StreamReader(userSelectedFilePath1);
        string tmp = "";
        while ((tmp = fin.ReadLine()) != null)
        {
        if (tmp.StartsWith("abc "))
            {
              var tmpList1 = tmp.Split(new[] { '"' }).SelectMany((s, i) =>
                {
                    if (i % 2 == 1) return new[] { s };
                    return s.Split(new[] { ' ', ';', ',' }, StringSplitOptions.RemoveEmptyEntries);
                }).ToList();

                 table.Rows.Add(new object[] { tmpList1[0], tmpList1[1], tmpList1[2], tmpList1[3]}); 

            }

        }

このコードを使用すると、abc で始まる文字列を見つけ、分割して DataTable に入れることができます。2 番目のインデックスが文字列か整数かを知るにはどうすればよいですか? 私がしたことで、2番目のインデックスにエラーがあり、正しく分割されないためです。if(tmp.StartsWith(abc NUMBER?)) else上記のコードを実行することを考えます

4

1 に答える 1

0

String.Split() を実行すると、配列内のすべての値も文字列になるため、ABC の例では次のようになります。

tmpList[1] = 123 // this is incorrect as the value is an int

これは次のようになります。

tmpList[1] = "123" // value is a string

次にできることは、値を int にキャストしようとすることです。失敗した場合は、int ではないことがわかります。

int number;
bool result = Int32.TryParse(tmpList[1], out number);
if (result) {
    // your code for if the value is a number        
}
else {
    // your code for if the value is not a number
}

hereからコピーされたコード例。

于 2012-12-13T16:17:34.170 に答える