【问题标题】:C# Check every other character is a '0'C#检查每个其他字符是否为'0'
【发布时间】:2011-05-15 00:08:57
【问题描述】:

我正在使用 BinaryReader 读取文本文件,然后用它做我想做的事情(剥离字符等),然后使用 BinaryWriter 将它写出来。

漂亮又简单。

在我剥离任何东西之前,我需要做的一件事是:

  1. 检查文件中的字符数是偶数(显然是file.Length % 2)和

  2. 如果长度是偶数,检查前面的每个字符是否为零。

例如:

0, 10, 0, 20, 0, 30, 0, 40.

我需要验证每个第二个字符是否为零。

有什么想法吗?某种聪明的 for 循环?

好的!

我需要更清楚自己在做什么。我有包含“记录”的 file.txt。假设它是一个逗号分隔的文件。现在,我的程序需要做的是逐字节读取这个文件,并去掉我们不想要的所有字符。我已经做到了。但是,将通过该程序的一些文件将是单字节的,有些是双字节的。我需要处理这两种可能性。但是,我首先需要弄清楚文件是单字节还是双字节。

现在,显然如果文件是双字节:

  1. 文件长度可以被 2 整除并且
  2. 前面的每个字符都是零。

这就是我需要这样做的原因。

我希望这能解决一些问题..

更新!

我将在参数中添加一个布尔值 - is16Bit。谢谢你们的帮助!我宁愿删除这个问题,但它不会让我..

【问题讨论】:

  • 这意味着一个有效的文件格式只包含整数,对吧?
  • 不,抱歉,我只是举个例子。我实际上是以字节为单位读取的,这就是我在那里使用数字的原因,我在考虑字符的十进制表示。我完全应该把它放在问题中,对不起!
  • 您正在阅读 BINARY,但谈论的是字符。该文件包含二进制数字还是文本数字?
  • 你为什么要阅读带有BinaryReader文本文件?
  • 它包含所有字符..字母,数字..

标签: c# string for-loop


【解决方案1】:

这个怎么样

string content = File.ReadAllText(@"c:\test.txt");
if (content.Length % 2 != 0)
    throw new Exception("not even");
for(int i = 0; i < content.Length; i+=2)
    if (content[i] != '0')
        throw new Exception("no zero found");

【讨论】:

    【解决方案2】:
    string[] foo = file.text.Split(new{','}, StringSplitOptions.RemoveEmptyEntries);
    for(int i=0; i<foo .Length; i+=2)
    {
      if(file[i]!="0")
         return false;
    }
    

    【讨论】:

      【解决方案3】:

      在静态类中是这样的:

      public static IEnumerable<T> EveryOther(this IEnumerable<T> list)
      {
         bool send = true;
         foreach(var item in list)
         {
            if (send) yield return item;
            send = !send;
         }
      }
      

      然后(使用前一个类的命名空间)

      bool everyOtherIsZero = theBytes.EveryOther().All(c => c == 0);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-27
        • 2019-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-12
        • 2018-06-13
        • 1970-01-01
        相关资源
        最近更新 更多