C# foreach循环后的新行

C# foreach循环后的新行,c#,loops,newline,C#,Loops,Newline,此代码正常工作 foreach (char c in partToDecode) { var sum = c - 48; if (sum > 40) { sum = sum - 8; } string suma = Convert.ToString(sum, 2).PadLeft(6, '0'); File.AppendAllText(@"C:\Users\jakub\Pulpit\binary.txt"

此代码正常工作

foreach (char c in partToDecode)
{
    var sum = c - 48;
    if (sum > 40)
    {
        sum = sum - 8;
    }

    string suma = Convert.ToString(sum, 2).PadLeft(6, '0');
    File.AppendAllText(@"C:\Users\jakub\Pulpit\binary.txt", suma);
}
我们在fori循环中是不可见的(我的意思是foreach,这个换行符在名为i的for循环中),所以我需要在foreach循环之后的for循环中有一个新行。 这段代码并没有像我希望的那样工作,我在开头有一行新行,在第二行是纯文本,希望在foreach循环的每次完成后都有一行新行

        string sumaaa = Convert.ToString(sum, 2).PadLeft(6, '0');
        File.AppendAllText(@"C:\Users\jakub\Pulpit\binary.txt", sumaaa);
    }

    FileStream stream = new FileStream(@"C:\Users\jakub\Pulpit\binary.txt", FileMode.Open);
    StreamWriter sw = new StreamWriter(stream);
    sw.Write("\n");
    sw.Close();
}
这有点小,之后我有一个代码,用于拆分位,将小部分转换为十进制。它早些时候起作用了,但我把它插入了一条评论,现在它什么也没写。这个循环毕竟是独立的,在单击ok后运行,然后我有一个form2,它总是显示,没有错误

for (var k = 0; k < binlines.Count(); k++)
{       
    var binline = binlines[k];
    if (binline != null) //in case it was an empty line error (it's not)
    { 
        string partmessage = binline.Substring(0, 6);
        string partdecoded = Convert.ToInt32(partmessage, 2).ToString();
        string partmessage2 = binline.Substring(6, 2);
        string partdecoded2 = Convert.ToInt32(partmessage2, 2).ToString();
        string partmessage3 = binline.Substring(8, 30);
        string partdecoded3 = Convert.ToInt32(partmessage3, 2).ToString();
        string so on to 15
        File.AppendAllText(@"C:\Users\jakub\Pulpit\decimal.txt", partdecoded + "," + partdecoded2 + "," partdecoded3 + "," + partdecoded4...)
    }
    else
    {
    }
for(var k=0;k

现在我遇到了一个例外,即“索引和长度必须引用字符串中的位置”

我建议不要使用csv格式开始,并将本机二进制数据写入磁盘。在这种情况下,您可以使用BinaryReader和BinaryWriter,这使它变得很简单

另外,制作一些healper方法或类来处理二进制数据到int的读取可能也是值得的

给定的

public struct BinReader
{
   private readonly string _line;
   private int _index;
   public BinReader(string line)
   {
      _line = line;
      _index = 0;
   }
   public int GetInt(int length)
   {
      var result = Convert.ToInt32(_line.Substring(_index, length), 2);
      _index += length;
      return result;
   }
}
用法

// some test data
var binLines = new List<string>()
{
   Convert.ToString(1, 2) + Convert.ToString(2, 2) + Convert.ToString(3, 2) + Convert.ToString(4, 2) + Convert.ToString(5, 2),
   Convert.ToString(1, 2) + Convert.ToString(2, 2) + Convert.ToString(3, 2) + Convert.ToString(4, 2) + Convert.ToString(5, 2),
};


// write to file
using (var sw = new BinaryWriter(new FileStream("SomeFileName.dat", FileMode.Create, FileAccess.ReadWrite)))
{
   foreach (var reader in binLines.Select(line => new BinReader(line)))
   {
      sw.Write(reader.GetInt(1));
      sw.Write(reader.GetInt(2));
      sw.Write(reader.GetInt(2));
      sw.Write(reader.GetInt(3));
      sw.Write(reader.GetInt(3));
   }
}

// read from file
using (var br = new BinaryReader(new FileStream("SomeFileName.dat", FileMode.Open, FileAccess.ReadWrite)))
{
   foreach (var reader in binLines.Select(line => new BinReader(line)))
   {
      Console.WriteLine(br.ReadInt32());
      Console.WriteLine(br.ReadInt32());
      Console.WriteLine(br.ReadInt32());
      Console.WriteLine(br.ReadInt32());
      Console.WriteLine(br.ReadInt32());
   }
}

什么是“不可见的for i循环”?@Charlieface:post中已澄清,只是
文件上方的一个非闭合for循环。AppendAllText(@“C:\Users\jakub\Pulpit\binary.txt”,suma+Environment.NewLine);
?如果您显示所需的实际格式以及所获得的格式(当其接近工作时),可能会有所帮助以及产生that@StriplingWarrior:你的意思是在foreach循环内?它将在每个字符转换为二进制后添加新行。我需要在每个partToDecode变量后添加新行(它是循环的)好吧,有时候我不知道它的长度,这完全取决于一条经过整理的消息。我将向您展示整个代码,因此第一部分是一个显示对话框动作,然后输入一个带有!AIVDM1,1,1,a,actualmessage的txt,6@Jacob2396我明白了。我不确定这个答案对你们有多大帮助,不管怎样,祝你们好运,我认为第二部分是有用的。不是吗你知道怎么做才能得到这一新行吗?获得它是至关重要的。我在考虑foreach循环中的一些循环,但我不了解所有的方法,所以不知道如何做这样的事情。(可能是foreach)
StringBuilder sb=…sb.append(sum);if(parttodecode.count=parttodecode.length){File.AppendAllText(path,sb.tostring()+“\n”)
}您看到这样做的选项了吗?
1
2
3
4
5
1
2
3
4
5