在文本文件中交换动态的行数

时间:2015-06-20 11:38:55

标签: c# random

我有很多带有值的文本文件,尽管文本文件中的行应该被部分加扰。

文本文件的示例如下:(参见编辑以获得更简单的示例)

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

2 个答案:

答案 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