我想读取一行文本文件,一次只读一个字符。我认为它是这样的:
string[] acct = File.ReadAllLines(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\Accts.txt");
for (int i = 0; i >= acct[line].Length; i++)
{
}
但我不知道for循环中会发生什么。我想阅读每个角色,如果它是一个特定的角色,它会做其他事情。
答案 0 :(得分:4)
目前还不清楚你要在这里实现什么,因为我们不知道line
是什么,但你的for
循环条件是错误的开始。您可以使用:
for (int i = 0; i < acct[line].Length; i++)
{
char c = acct[line][i];
...
}
但除非您需要索引,否则我会使用:
foreach (char c in acct[line])
{
...
}
...除非您需要行的索引,否则我也会使用foreach
作为行。
我可能不会同时将它们全部读入内存,除非你真的需要:
string directory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string path = Path.Combine(directory, "Accts.txt");
foreach (string line in File.ReadLines(path))
{
foreach (char c in line)
{
// ...
}
}
您可能希望将代码拆分以使其更易于阅读,但是 - 编写一个方法来处理单行,因此您需要:
string directory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string path = Path.Combine(directory, "Accts.txt");
foreach (string line in File.ReadLines(path))
{
ProcessLine(line);
}
...
void ProcessLine(string line)
{
// Do whatever in here
}
这也更容易测试 - 因为您不需要读取文件来测试单行的处理。
答案 1 :(得分:0)
我们不知道line
在这里是什么,但由于你可以在string
lopp中使用foreach
,你可以这样做;
for (int i = 0; i < acct[line].Length; i++)
{
foreach(char c in line)
{
if(c is specific character)
{
//Do something
}
}
}
答案 2 :(得分:0)
var chars = File.ReadLines(path).SelectMany(x => x);
foreach(char c in chars)
{
//tada
}