今晚我遇到了一种情况,我想解析一个文本文件。我有一个非常非常长的单词列表,其中包含用行分隔的英语单词。我想删除每个超过 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
答案4
微软 Excel(或 OpenOffice 电子表格)作为开发工具被严重低估了。虽然有行数上限,但您也许可以利用其中一种工具。
然后,您只需在电子表格中行右侧的公式中使用 left、mid、if 等函数即可。它们将自动复制并带有相对引用。
很多时候它比编码容易得多,除非你是一名程序员:)从那里你可以导入、导出,甚至可以使用文本做很多很酷的事情。