我有很多带有值的文本文件,尽管文本文件中的行应该被部分加扰。
文本文件的示例如下:(参见编辑以获得更简单的示例)
0.00;1.2;3;2015-20-06 13:33:33
0.00;1.2;3;2015-20-06 13:33:34
0.00;1.2;3;2015-20-06 13:33:35
0.00;1.2;3;2015-20-06 13:33:36
[RAND]
0.00;1.2;3;2015-20-06 12:05:05
0.00;1.2;3;2015-20-06 12:05:22
0.00;1.2;3;2015-20-06 12:06:27
0.00;1.2;3;2015-20-06 12:05:42
[/RAND]
0.00;1.2;3;2015-20-06 12:25:36
0.00;1.8;3;2015-20-06 12:26:26
0.00;1.2;3;2015-20-06 12:28:05
[RAND]
0.00;1.8;3;2015-20-06 12:32:22
0.00;1.2;3;2015-20-06 12:33:04
[/RAND]
[RAND]
和[/RAND]
之间的所有内容都应按随机顺序排列。
到目前为止,我有以下内容,但我完全不知道如何从这里继续,或者这是否是正确的方法。
using (StreamReader reader = new StreamReader(LocalFile))
{
bool InRegion = false;
string line;
while ((line = reader.ReadLine()) != null)
{
if (line.Equals("[RAND]"))
InRegion = true;
if (line.Equals("[/RAND]"))
InRegion = false;
}
}
我担心的一个问题是我使用的是StreamReader,因此无法更改文件。
RAND
块内可能有2行,但也有10行,每个文件有多个RAND
块。
有人可以解释一下如何去做吗?
提前多多感谢。
修改
更简单的例子:
A
B
C
[RAND]
D
E
F
[/RAND]
G
H
然后它应该以随机顺序对D,E和F进行加扰,以便得到如下内容:
A
B
C
E
F
D
G
H
答案 0 :(得分:2)
"笨重"方式,导致大多数代码(尽管可读),将是:
这样的事情:
var linesInFile = File.ReadAllLines();
var newLines = new List<string>();
var toRandomize = new List<string>();
bool inRegion = false;
for (int i = 0; i < linesInFile.Count; i++)
{
string line = linesInFile[i];
if (line == "[RAND]")
{
inRegion = true;
continue;
}
if (line == "[/RAND]")
{
inRegion = false;
// End of random block.
// Now randomize `toRandomize`, add it to newLines and clear it
newLines.AddRange(toRandomize);
toRandomize.Clear();
continue;
}
if (inRegion)
{
toRandomize.Add(line);
}
else
{
newLines.Add(line);
}
}
File.WriteAllLines(newLines, ...);
请参阅Randomize a List<T>随机化列表。
答案 1 :(得分:0)
我觉得很好
立即阅读文件的所有文字
并获得具有正则表达式的随机区域
并用它替换随机结果
以上步骤可以通过c
类的Replace
方法完成。
最后将新内容保存到文件
例如:
RegEx