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