我想读取一行文本文件,一次一个字符。我想它会是这样的:
string[] acct = File.ReadAllLines(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\Accts.txt");
for (int i = 0; i >= acct[line].Length; i++)
{
}
但我不知道 for 循环中发生了什么。我想阅读每个字符,如果它是一个特定的字符,让它做别的事情。
我想读取一行文本文件,一次一个字符。我想它会是这样的:
string[] acct = File.ReadAllLines(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\Accts.txt");
for (int i = 0; i >= acct[line].Length; i++)
{
}
但我不知道 for 循环中发生了什么。我想阅读每个字符,如果它是一个特定的字符,让它做别的事情。
目前尚不清楚您要在这里实现什么,因为我们不知道是什么line
,但是您的for
循环条件是错误的开始方式。您可以使用:
for (int i = 0; i < acct[line].Length; i++)
{
char c = acct[line][i];
...
}
但除非您需要索引,否则我会使用:
foreach (char c in acct[line])
{
...
}
...除非您需要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
}
这也更容易测试 - 因为您不需要读取文件来测试单行的处理。
var chars = File.ReadLines(path).SelectMany(x => x);
foreach(char c in chars)
{
//tada
}
我们不知道line
这里有什么,但因为你可以string
在foreach
lopp 中使用,所以你可以这样做;
for (int i = 0; i < acct[line].Length; i++)
{
foreach(char c in line)
{
if(c is specific character)
{
//Do something
}
}
}