我有几个.dat文件,其数据看起来像这样。
˙˙˙Pb16.5 Nw2 ..00-R0634 317. PRESSURE 400.0 CMH2O 1750.0 CMH2O 1750.0 CMH2O 400.0 CMH2O TEMPERATURE -20.00 °C 100.00 °C 100.00 °C -20.00 °C 2:Spec.cond. 0.00 mS/cm 120.00 mS/cm 120.00 mS/cm 0.00 mS/cm 00 00:60:00 0T 00:00:15 29/01/14 00:00:14 30/01/14~**5 ~*–5 ‡*>4 *o3 –*î2 ˇ*z2 ¬*W2
我需要将这一行分成两个字符串。第一个字符串将包含:
˙˙˙Pb16.5 Nw2 ..00-R0634 317. PRESSURE 400.0 CMH2O 1750.0 CMH2O 1750.0 CMH2O 400.0 CMH2O TEMPERATURE -20.00 °C 100.00 °C 100.00 °C -20.00 °C 2:Spec.cond. 0.00 mS/cm 120.00 mS/cm 120.00 mS/cm 0.00 mS/cm 00 00:60:00 0T 00:00:15 29/01/14 00:00:14 30/01/14
和secound:
~**5 ~*–5 ‡*>4 *o3 –*î2 ˇ*z2 ¬*W2
问题是下一个:我在这个问题的顶部提到我有几个.dat文件,而且他们的数据并不是唯一的。在这个例子中我可以很容易地用~char分隔,但问题是文件数据不一样。在最后一个日期之后的其他一些文件中包含其他一些字符,例如s*ő4 x*^5
或ÝM};ô
。我不能用明确的字母分开。也许我可以按字节分开,因为我知道字节数,它的前347个字节,但我不知道如何。
string url = @"E:Data.dat";
using (Stream stream = File.Open(url, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (StreamReader sr = new StreamReader(stream))
{
string str = sr.ReadToEnd(); // or sr.ReadBlock();
//code to separate string after last date
}
答案 0 :(得分:0)
我不确定输入文件的一致性,但似乎要提取的值以〜开头。第一个〜在线,所以对于每一行,你可以获取〜字符的索引并从那里读取字符串:
string url = @"E:Data.dat";
using (Stream stream = File.Open(url, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (StreamReader sr = new StreamReader(stream))
{
string str = sr.ReadToEnd();
var characterIndex = str.IndexOf('~');
if (characterIndex >= 0)
{
var result = str.SubString(characterIndex, str.Length - characterIndex);
// Work from here
}
}
}
答案 1 :(得分:0)
我创建了char数组并给了他一个值。然后我创建了int readBytes并从流阅读器(sr)给他readBlock,其中范围是500,start来自第一个char并读取前59个字符。
using (Stream stream = File.Open(url, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (StreamReader sr = new StreamReader(stream))
{
char[] buffer = new char[500];
int readBytes = sr.ReadBlock(buffer, 0, 59);
}