有一个txt文档,里面有很多行长度相等的数据,都是类似于:2020-09-25 12:10:18 数据:2020-09-25 12:10:18 /134/123/21/
我需要获取到每一行的“ 数据:”后的时间跟第一个/与第二个/中间的数据,应该怎么获取?数据非常多,貌似数组保存不完
首先,你的文档格式是你自己定的。怎么分割,拆分,你要清楚,清楚之后。就可以逐行读取。拆分,匹配。
按上边例子就是 匹配时间 2020-09-25,数据内容 /134/123/21/。正则,手动分割都可以
如果位置是一样的,用索引取就好了,否则用正则表达式
学一下正则表达式
你把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进行判断修改即可。
这种情况最好是每读取一行,用正则表达式去提取