0

我尝试了几种不同的方法,但没有一个能正常工作,所以我只是在找人直接告诉我如何去做。我希望我的应用程序读取基于 OpenFileDialog 的文件。

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

 objSqlCommands.sqlCommandInsertorUpdate

但是我想通过字符串,计算找到的“,”的数量。当数字达到四个时,我只想将遇到的字符直到下一个“,”,然后一直执行到文件末尾..有人可以告诉我该怎么做吗?

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

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

4 回答 4

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
于 2013-08-06T08:34:30.437 回答
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,然后用“,”替换每个换行符。然后它在 "," 上拆分字符串,并从第五个单词开始获取字符串中的每个第五个单词并将其添加到列表中。

于 2013-08-06T08:34:42.180 回答
1

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

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

如果您有多条线路,请使用:

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

这给出了IEnumerable<string>每个字符串包含文件一行中所需部分的位置

于 2013-08-06T08:15:44.837 回答
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);

每五分之一

每行只有第五段文字:

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]);

第五条每条线

于 2013-08-06T09:32:26.750 回答