我有一个类似于此的重复文本文件,我希望根据'Tx'指示符将其分解为单个文件....有关如何实现此目的的任何想法?
Tx1
some data
some data
Tx2
some data
some data
Tx3
some data
some data
答案 0 :(得分:5)
1.将文件内容作为字符串
添加到内存中2.使用RegEx拆分
string[] lines = Regex.Split(str, "Tx^[0-9]");
3.保存每行不同的文件
答案 1 :(得分:0)
您可能会考虑一种可能更高效的实现,它可以在线生成文件而无需将所有块提交到内存中。
鉴于一些IEnumerator
:
static IEnumerator<string> DataStream()
{
var original = "Tx1\nsome data1\nsome data2\nTx2\nsome data3\nsome data4\nTx3\nsome data5\nsome data6\nTx4\nTx5";
Console.WriteLine("Original: {0}", original);
return ((IEnumerable<string>) original.Split('\n')).GetEnumerator();
}
您可以一次性构建所有文件。设置一些predicate function,为Tx^[0-9]
案例返回true(请注意,这可以使用正则表达式轻松替换):
Func<string, bool> isDelimiterString = token =>
token.Length > 2
&& token[0] == 'T'
&& token[1] == 'x';
直接处理IEnumerator
的算法是:
var enumerable = DataStream();
var enumeratorHasNext = enumerable.MoveNext();
while (enumeratorHasNext)
{
var delimiter = enumerable.Current;
using (var file = new StreamWriter(delimiter + ".txt"))
{
enumeratorHasNext = enumerable.MoveNext();
while (enumeratorHasNext && !isDelimiterString(enumerable.Current))
{
file.WriteLine(enumerable.Current);
enumeratorHasNext = enumerable.MoveNext();
}
}
}
我提出了一个有效的例子on Github。