解析文本文件

解析文本文件

今晚我遇到了一种情况,我想解析一个文本文件。我有一个非常非常长的单词列表,其中包含用行分隔的英语单词。我想删除每个超过 7 个字符的单词(或行)。这在 Linux 中很简单,但在 Windows XP 中似乎找不到简单的解决方案。我尝试使用 Notepad++ 正则表达式搜索,但失败了。我尝试使用该表达式.{6,}但没有找到任何匹配项。我真的很茫然,因为我认为这种事情会非常简单,并且会有大量工具来完成这样的任务。似乎 Notepad++ 支持世界上的所有其他功能,除了最明显的最基本的功能。

我的另一个目标是在每行的单词前后放置一些代码。

aardvark
apple
azolio

会变成

INSERT INTO Words (word) VALUES ('aardvark');
INSERT INTO Words (word) VALUES ('apple');
INSERT INTO Words (word) VALUES ('azolio');

您有什么建议/工具/提示可以在 Windows XP 中完成类似的任务?

答案1

要添加 SQL 文本,您可以尝试此命令提示符:

(for /f %i in (words.txt) do @echo INSERT INTO Words ^(word^) VALUES ^('%i'^)) > words.sql

要过滤文本文件中长度超过 7 个字符的行,可以使用另一个命令行工具 findstr:

findstr /v /r ^.........*$ words.txt > shorter-words.txt

/r 选项指定要使用正则表达式匹配,而 /v 选项则告诉它打印不匹配的行。(由于 findstr 似乎不允许您指定字符数范围,因此我使用“8 或更多”模式和“不匹配”选项来伪造它。)

答案2

当然是 Perl,只需粘贴此脚本并在与单词表相同的目录中运行它即可。将单词表名称更改为 words.txt 或更改脚本中的名称。您可以将输出重定向到新文件,如下所示:

words.pl > list.txt

无进一步的进展(快速将其搅拌在一起,可以砍掉相当多):

open FILE, "words.txt" or die $!;

my @words = <FILE>;

foreach $word(@words)
{
    print $word if(length($word) <= 8);
}

答案3

您可以获得GNUWin32 sed对于 Windows XP。
同样AWKPerl也是。
前提是你已经习惯了 Unix 脚本(如果是这样,也可以考虑 Cygwin)。

否则还有 PowerShell。

答案4

微软 Excel(或 OpenOffice 电子表格)作为开发工具被严重低估了。虽然有行数上限,但您也许可以利用其中一种工具。

然后,您只需在电子表格中行右侧的公式中使用 left、mid、if 等函数即可。它们将自动复制并带有相对引用。

很多时候它比编码容易得多,除非你是一名程序员:)从那里你可以导入、导出,甚至可以使用文本做很多很酷的事情。

相关内容