首页 新闻 会员 周边 捐助

C#怎么获取txt文档的每一行数据里的特定字符?

0
悬赏园豆:50 [待解决问题]

有一个txt文档,里面有很多行长度相等的数据,都是类似于:2020-09-25 12:10:18 数据:2020-09-25 12:10:18 /134/123/21/
我需要获取到每一行的“ 数据:”后的时间跟第一个/与第二个/中间的数据,应该怎么获取?数据非常多,貌似数组保存不完

C#
彭捧碰的主页 彭捧碰 | 初学一级 | 园豆:111
提问于:2020-09-25 13:01
< >
分享
所有回答(5)
0

首先,你的文档格式是你自己定的。怎么分割,拆分,你要清楚,清楚之后。就可以逐行读取。拆分,匹配。
按上边例子就是 匹配时间 2020-09-25,数据内容 /134/123/21/。正则,手动分割都可以

flyfishing | 园豆:927 (小虾三级) | 2020-09-25 13:20
0

如果位置是一样的,用索引取就好了,否则用正则表达式

会长 | 园豆:12463 (专家六级) | 2020-09-25 13:43
1

学一下正则表达式

不知道风往哪儿吹 | 园豆:2037 (老鸟四级) | 2020-09-25 13:46
1

你把StringReader 或者File  的ReadLine 源码看看替换掉逻辑就行了。

File微软明显会给通用方式,不然文件大一点,程序只有等待死亡了,如果用正则意味着同样的内存问题,所以看实际情况选择使用。

以下提供通行(不至于文件过大,内存搞崩)方式 File.ReadAllLines()=>通过StreamReader实现的

public override string ReadLine()
    {
      if (this.stream == null)
        __Error.ReaderClosed();
      this.CheckAsyncTaskInProgress();
      if (this.charPos == this.charLen && this.ReadBuffer() == 0)
        return (string) null;
      StringBuilder stringBuilder = (StringBuilder) null;
      do
      {
        int charPos = this.charPos;
        do
        {
          char ch = this.charBuffer[charPos];
          switch (ch)
          {
            case '\n':
            case '\r':
              string str;
              if (stringBuilder != null)
              {
                stringBuilder.Append(this.charBuffer, this.charPos, charPos - this.charPos);
                str = stringBuilder.ToString();
              }
              else
                str = new string(this.charBuffer, this.charPos, charPos - this.charPos);
              this.charPos = charPos + 1;
              if (ch == '\r' && (this.charPos < this.charLen || this.ReadBuffer() > 0) && this.charBuffer[this.charPos] == '\n')
                ++this.charPos;
              return str;
            default:
              ++charPos;
              continue;
          }
        }
        while (charPos < this.charLen);
        int charCount = this.charLen - this.charPos;
        if (stringBuilder == null)
          stringBuilder = new StringBuilder(charCount + 80);
        stringBuilder.Append(this.charBuffer, this.charPos, charCount);
      }
      while (this.ReadBuffer() > 0);
      return stringBuilder.ToString();
    }

你可以改写微软这段,charPos 定位,加上offset进行判断修改即可。

花飘水流兮 | 园豆:13617 (专家六级) | 2020-09-25 16:50
0

这种情况最好是每读取一行,用正则表达式去提取

狼图腾TOP | 园豆:322 (菜鸟二级) | 2020-09-27 01:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册