-3

これを空白で分割するにはどうすればよいですか。(最初の行はそのヘッダーです)

ここに画像の説明を入力

このコードを試してみましたが、cbay.ABS = columnsC[5] で "index out of range" というエラーが発生しました。2 行目も 6 つの要素を返すようにします。

using (StringReader strrdr = new StringReader(strData))
{
    string str;
    while ((str = strrdr.ReadLine()) != null)
    {
        //  str = str.Trim();
        if ((Regex.IsMatch(str.Substring(0, 1), @"J")) || (Regex.IsMatch(str.Substring(0, 1), @"C")))
        {
            columnsC = Regex.Split(str, " +");
            cbay.AC = columnsC[1];
            cbay.AU = columnsC[2];
            cbay.SA = columnsC[3];
            cbay.ABS = columnsC[5];
            // cbay.ABS = str;
        }
    }
}
4

2 に答える 2

2

冗長なワイトスペースのない単語のみを取得するには、メソッドのStringSplitOptions.RemoveEmptyEntries2 番目の引数として渡すことができます。if は各空白で分割されるため、すべての冗長な「空白」を削除します。正規表現を使用する代わりに、次の簡単な例を確認してください。Splitstring

string inputString = "Some string   with  words     separated with multiple    blanck   characters";
string[] words = inputString.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
string resultString = String.Join(" ", words); //joins the words without multiple whitespaces, this is for test only.

編集特定のケースでは、パーツが複数の空白 (少なくとも 3 つ) で区切られているこの文字列を使用すると、機能します。例を確認してください:

string inputString = "J   16   16   13   3   3";
string[] words = inputString.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

EDIT2:これはあなたの問題に対する最も単純で最も愚かな解決策ですが、うまくいくと思います:

if(str.Length>0 && ((str[0]=="J") || (str[0]=="C")))
{
   columnsC = str.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
   if((str[0]=="J")
   {
            cbay.AC = columnsC[1];
            cbay.AU = columnsC[2];
            cbay.SA = columnsC[3];
            cbay.ABS = columnsC[5];
   }
   else
   {
            cbay.AU = columnsC[1];
            cbay.SA = columnsC[2];
   }
}
于 2013-03-29T09:49:54.427 に答える
0

最初に複数のスペースをゼロに置き換えてから、残りの単一スペースで分割することができます。

        var test = "test 1 2    3";
        var items = test.Replace("  ", "0").Split(' ');

スペースが多い場合は 00 の位置が得られる可能性がありますが、それでも機能すると思います

于 2013-03-29T10:02:23.743 に答える