如何通过选择多行来反转字符串内容?

时间:2016-12-06 20:33:55

标签: c# reverse record

我在网上发现了许多用于反转字符串和整个文本文件的资源,但没有任何结果可以产生我想要的结果。

例如,基本文本文件可能如下所示:

1                                                 
Person One                                         
Company Name                                           
100 San Francisco Blvd, 000                                 
Dublin CA 94568                                   


2                                                 
Person Two                                       
Company Name                                               
111 Grove St, 000                                 
Montreal CANADA 93940 

这就是文件的来源。我要找的是:

2                                                 
Person Two                                       
Company Name                                               
111 Grove St, 000                                 
Montreal CANADA 93940 

1                                                 
Person One                                         
Company Name                                           
100 San Francisco Blvd, 000                                 
Dublin CA 94568               

我在线尝试了几种解决方案,通常最终会发生以下情况之一:

1)文本被颠倒。例如,公司名称变为emaN ynapmoC。

OR

2)发生类似这样的事情:

Montreal CANADA 93940 
111 Grove St, 000 
Company Name
Person Two
2

给出的是列长度(我将始终知道地址字段中有多少行),我将始终知道总共有多少行。每条记录之间都有一个空白行。

我试图找出如何取出filename.txt并将其翻译成filename-reversed.txt。

TLDR:我想采用x行数并反转它们,以免混淆/混乱。

3 个答案:

答案 0 :(得分:3)

var groups = Regex.Split(File.ReadAllText(filename), @"\r?\n\r?\n", RegexOptions.Singleline);
var newtext = string.Join(Environment.NewLine+ Environment.NewLine, groups.Reverse());
File.WriteAllText(filename, newtext);

答案 1 :(得分:1)

您需要将文件分成"记录"。一旦你有记录而不仅仅是行,反转顺序应该是一项微不足道的任务。

最简单的方法是在每个第N个换行符中将文件分成字符串。您可以将这些N行字符串加载到列表中。然后只需反向循环遍历列表并将记录转储到文件中。

答案 2 :(得分:-2)

在python中:

blocks = []
with open(filename, "r") as f:
    block = ""
    for i, line in enumerate(f):
        block += line
        if i % block_line_size == 0:
            blocks.append(block)
            block = ""
with open(new_file_name, "w") as f2:
    for block in blocks[::-1]:
        f2.write(block)