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

How can I reverse string contents by selecting multiple lines?

我在网上找到了很多用于反转字符串和整个文本文件的资源,但都没有产生我想要的结果。

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

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。

2) 发生了这样的事情:

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

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

我想弄清楚如何从本质上获取 filename.txt 并将其转换为文件名-reversed.txt。

TLDR:我想取 x 行并反转它们,这样它们就不会 mixed/jumbled 上升。

您需要将文件拆分为 "records"。一旦有了记录而不仅仅是行,颠倒顺序应该是一项微不足道的任务。

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

在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)
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);