从文本文件中读取一行并解释它所在的字符?

时间:2013-08-03 19:47:56

标签: c#

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

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

}

但我不知道for循环中会发生什么。我想阅读每个角色,如果它是一个特定的角色,它会做其他事情。

3 个答案:

答案 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
}