【问题标题】:read a file letter by letter in c#在c#中逐个字母读取文件
【发布时间】:2021-09-07 01:07:21
【问题描述】:

我正在尝试逐个字母地阅读文件,但是我的各种尝试都不起作用,并且继续在文件中只找到一次我的信

string lettre = "T";
string[] file = File.ReadAllLines("C:/<pathto>/test7.txt");

for (int i = 0; i < file.Length;i++)
{
    if (file[i].Contains(lettre))
    {
        Console.WriteLine("test");
    }
}

我尝试逐字母读取文件以生成像素,但我阻止读取文件

【问题讨论】:

  • 逐字阅读可能会变得很困难。逐字节读取怎么样?只有ASCII吗?
  • 只使用equal : if (file[i] == lettre)
  • 您可以使用接受路径的构造函数创建StreamReaderr,并使用Read逐字符读取文件。如果文件很小,您可以使用var text=File.ReadAllText(path); 将内存中的所有内容作为字符串读取并读取字符,例如foreach(var c in text){...}for (int i=0;i&lt;text.Length;i++){ var c=text[i];...}
  • @canterlot 你到底想做什么?查找文件是否包含单个 T?有多少个T?哪些行有T?所有这些都有不同的、简单的解决方案,没有一个需要逐字阅读。您发布的代码将找到所有包含 T 的行

标签: c# file txt


【解决方案1】:

从您的代码看来,您可以将整个文件读入内存。如果是这样,那只是循环的问题。

还要注意字符串"T"和字符(字母)'T'之间的区别。

string[] file = File.ReadAllLines("C:/<pathto>/test7.txt");

foreach(string line in file)
{
    foreach(char letter in line)
    {
         if (letter == 'T')
         {
                // do something
         }
    }
}

如果您真的想逐个字符地读取文件,那么字符仅来自 ASCII 范围也可以。你可以使用FileStream.ReadByte()

using(var fileStream = new FileStream(fileName, FileMode.Open))
{
    int character = 0;
    while(character != -1)
    {
         character = fileStream.ReadByte();
         if (character == -1) continue;
         if ((char)character == 'T')
         {
              // do something
         }
    }
}

【讨论】:

  • 只是为了澄清,ASCII 只是让事情变得更容易,或者例如。 UTF8 做不到?
  • @RandRandom ASCII 是每个字符一个字节。 UTF-8 是每个 代码点 的一到四个字节,然后它可能是单个“逻辑”字符的多个代码点(组合表情符号是常见的例子)。 C# 的 char 是代码点,而不是逻辑字符。对于枚举“逻辑”字符,further effort 是必需的。
【解决方案2】:

这应该可行:

using System;
using System.IO;
using System.Text;

namespace Exemple
{
    class Program
    {
        static void Main(string[] args)
        {
            char lettre = 'T';

            using(StreamReader file = new StreamReader(@"C:\<pathto>\test7.txt", Encoding.UTF8)) //you can change the Encoding file type
            {
                while (!file.EndOfStream)
                {
                    string line = file.ReadLine();
                    foreach(char letter in line)
                    {
                        if(letter == lettre)
                            Console.WriteLine("An letter " + lettre + " founded.");
                    }
                }
            }
        }
    }
}

还要注意您的操作系统,如果是 Windows,则路径分隔符是“\”,如果是 Unix 操作系统,则路径分隔符是“/”。

【讨论】:

    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 2011-04-12
    • 2010-12-24
    相关资源
    最近更新 更多