子串编辑

时间:2013-08-06 08:06:23

标签: c# string linq substring

我尝试过几种不同的方法,但没有一种方法正常工作,所以我只是想找人直接告诉我该怎么做。我希望我的应用程序读取基于OpenFileDialog的文件。

当读入文件时我想通过它并运行这个使用Linq将数据插入我的数据库的函数。

 objSqlCommands.sqlCommandInsertorUpdate

但是我想通过字符串,计算“,”的数量。当数字达到4时我想只接受遇到的字符直到下一个“,”并执行此操作直到文件结束..有人可以告诉我如何做到这一点吗?

根据这里给出的答案,我的代码现在看起来像这样

string fileText = File.ReadAllText(ofd.FileName).Replace(Environment.NewLine,“,”);

               int counter = 0;
               int idx = 0;
               List<string> foo = new List<string>();

               foreach (char c in fileText.ToArray())
               {
                   idx++;
                   if (c == ',')
                   {
                       counter++;
                   }
                   if (counter == 4)
                   {
                       string x = fileText.Substring(idx);
                       foo.Add(fileText.Substring(idx, x.IndexOf(',')));
                       counter = 0;
                   }
               }

               foreach (string s in foo)
               {
                   objSqlCommands.sqlCommandInsertorUpdate("INSERT", s);//laClient[0]);
               }

但是我在foo.add函数调用中得到“长度不能小于0”的错误,有什么想法吗?

4 个答案:

答案 0 :(得分:2)

一个有点hacky的例子。您可以将文件中的整个文本作为单个字符串传递给它。

string str = "1,2,3,4,i am some text,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20";
int counter = 0;
int idx = 0;
List<string> foo = new List<string>();

foreach (char c in str.ToArray())
{
     idx++;
     if (c == ',')
     {
          counter++;
     }
     if (counter == 4)
     {
          string x = str.Substring(idx);
          foo.Add(str.Substring(idx, x.IndexOf(',')));
          counter = 0;
     }
}

foreach(string s in foo)
{
     Console.WriteLine(s);
}
Console.Read();

打印:

  • i am some text
  • 9
  • 13
  • 17

答案 1 :(得分:1)

File.ReadAllText将文本文件读取为字符串,Split将该字符串转换为以逗号分隔的数组:

File.ReadAllText(OpenDialog.FileName).Split(',')[4]

如果您使用多行:

File.ReadAllLines(OpenDialog.FileName).Select(l => l.Split(',')[4])

这给出IEnumerable<string>,其中每个字符串包含文件的一行

中的所需部分

答案 2 :(得分:1)

Raidri在答案中指出,String.Split绝对是你的朋友。为了抓住每五个字,你可以尝试这样的事情(未经测试):

string fileText = File.ReadAllText(OpenDialog.FileName).Replace(Environment.NewLine, ",");

string words[] = fileText.Split(',');

List<string> everFifthWord = new List<string>();

for (int i = 4; i <= words.Length - 1, i + 5)
{
    everyFifthWord.Add(words[i]);
}

上面的代码从OpenFileDialog读取所选文件,然后用“,”替换每个换行符。然后它将字符串拆分为“,”,并从第五个单词开始,将字符串中的每个第五个单词添加到列表中。

答案 3 :(得分:0)

我不清楚你是否在逗号之间的每五个文本之后,或者如果有多行并且你只想要每行上的第五个文本。所以我已经做到了。

每五个文字:

var text = "1,2,3,4,i am some text,6,7,8,9"
    + ",10,11,12,13,14,15,16,17,18,19,20";

var everyFifth =
    text
        .Split(',')
        .Where((x, n) => n % 5 == 4);

everyFifth

每行只有第五段文字:

var lines = new []
{
    "1,2,3,4,i am some text,6,7",
    "8,9,10,11,12,13,14,15",
    "16,17,18,19,20",
};

var fifthOnEachLine =
    lines
        .Select(x => x.Split(',')[4]);

fifthOnEachLine