我有一个像这样的文件
10 NDI 27 2477 6358 4197 -67 0 VVFAˆ ÿÿÿÿ
最后一列是二进制。 我必须阅读这个文件,问题是我无法将其作为文本阅读,因为在某些行中,最后一列有一个新的行字符,因此我不会读取整行。 然后我应该把它读作二进制文件,但是如何检索第一列和第三列? 我尝试通过这种方式读取字节:
byte[] lines1 = System.IO.File.ReadAllBytes("D:\\dynamic\\ap1_dynamic\\AP_1.txt");
然后使用
将其转换为字符串 for (i = 0; i < lines1.Length; i++) {
Convert.ToString(lines1[i],2);
}
然后它将所有内容读作0和1 ..我想将前8列作为文本读取,而最后一列作为二进制读取..
我正在使用Visual Studio 2013,C#。
答案 0 :(得分:0)
将文件读取为二进制文件是正确的,因为您可以将部分二进制数据转换为文本。在此上下文中,二进制表示字节。
将字节转换为二进制文件不是您想要做的。在此上下文中,二进制表示基础2中的文本表示,但您不希望数据的文本表示。
如果线条是固定长度的,您可以执行以下操作来读取值:
int lineLen = 70; // correct this with the actual length
int firstPos = 0;
int firstLen = 3; // correct with actual length
int thirdPos = 15; // correct with actual position
int thirdLen = 3; // correct with actual length
int lastPos = 60; // correct with actual position
int lastLen = 10; // correct with actual length
int lines = lines.length / lineLength;
for (int i = 0; i < lines; i++) {
int first = Int32.Parse(Encoding.UTF8.GetString(i * lineLen + firstPos, firstLen).Trim());
int third = Int32.Parse(Encoding.UTF8.GetString(i * lineLen + thirdPos, thirdLen).Trim());
byte[] last = new byte[lastLen];
Array.Copy(lines1, i * lineLen + lastPos, last, 0, lastLen);
// do something with the data in first, third and last
}