从dat文件中分离字符串

时间:2014-08-21 08:00:08

标签: c# asp.net regex

我有几个.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
            }

2 个答案:

答案 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);
                }