我尝试过几种不同的方法,但没有一种方法正常工作,所以我只是想找人直接告诉我该怎么做。我希望我的应用程序读取基于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”的错误,有什么想法吗?
答案 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);
每行只有第五段文字:
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]);