2

我想读取一行文本文件,一次一个字符。我想它会是这样的:

string[] acct = File.ReadAllLines(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\Accts.txt");
for (int i = 0; i >= acct[line].Length; i++)
{

}

但我不知道 for 循环中发生了什么。我想阅读每个字符,如果它是一个特定的字符,让它做别的事情。

4

3 回答 3

4

目前尚不清楚您要在这里实现什么,因为我们不知道是什么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
}

这也更容易测试 - 因为您不需要读取文件来测试单行的处理。

于 2013-08-03T19:50:27.500 回答
0
var chars = File.ReadLines(path).SelectMany(x => x);
foreach(char c in chars)
{
    //tada
}
于 2013-08-03T20:06:04.600 回答
0

我们不知道line这里有什么,但因为你可以stringforeachlopp 中使用,所以你可以这样做;

for (int i = 0; i < acct[line].Length; i++)
{
    foreach(char c in line)
    {
        if(c is specific character)
        {
           //Do something
        }
    }
}
于 2013-08-03T19:51:12.067 回答