所以我一直在使用 Notepad ++ 做一些小清理工作,现在我离开了最大的任务..
我有一个名为Artists.txt
的文件,看起来像
Butta Mohamed
Daler Mehndi
Daljit Mattu
Darshan Khela
Davinder Deep
Davinder Deol
etc...
我有另一个名为Keywords.txt
的文件(位于数百个其他文件夹中)。这些文件夹的名称如下所示,它们都包含一个名为Keywords.txt的文本文件
butta-mohamed-lyrics
daler-mehndi-lyrics
daljit-mattu-lyrics
darshan-khela-lyrics
davinder-deep-lyrics
davinder-deol-lyrics
Keywords.txt包含文本_1(Keywords.txt中的几个实例)。
我想要做的是从Artists.txt
获取每一行并替换_1。文件夹与Artists.txt的顺序相同。
所以阅读Artists.txt得到第一行Butta Mohamed得到第一个文件夹butta-mohamed-lyrics编辑Keywords.txt找到_1替换(全部)与Butta Mohamed。保存更改。冲洗并重复阅读Artists.txt获取下一行Daler Mehndi获取下一个文件夹daler-mehndi-lyrics编辑Keywords.txt找到_1替换(全部)与Daler Mehndi。保存更改。
想知道这样的事情是否可行?否则,我需要一周的时间通过复制/粘贴或者甚至 Notepad ++ 中的替换功能手动执行此操作
我已经尝试过Notepad ++中的Macro函数但是CTRL-V而不是在剪贴板中粘贴什么,宏似乎用任何记录宏的文本替换了CTRL-V函数。
所以只需添加一些额外的信息......
答案 0 :(得分:1)
我没有安装Notepad ++,因为我最喜欢的文本编辑器是UltraEdit(共享软件)。
尽管Stack Overflow不是一个免费的代码编写服务,我们希望提问者向我们展示已经为解决任务所做的一些编程工作,但我很容易为这个任务编写一个小的UltraEdit脚本,因此这里是用于此任务的UltraEdit脚本。
脚本顶部的 C:\\Temp\\Test\\
必须替换为* lyrics文件夹的父文件夹路径。 UltraEdit脚本使用JavaScript核心引擎执行。因此,UltraEdit脚本中的字符串是JavaScript字符串,其中反斜杠是转义字符。因此,有必要将父文件夹路径中的每个反斜杠转义一个反斜杠。
要在UltraEdit中运行此脚本,请在UltraEdit中打开Artists.txt
作为第一个文件。
当第二个文件使用Ctrl + N创建一个新的ASCII文件时,将下面的行复制并粘贴到这个新文件中,编辑脚本代码中的父文件夹路径/名称并保存此脚本,例如名称为KeywordsReplace.js
进入任何文件夹。
现在通过在命令运行活动脚本上单击菜单脚本来运行脚本。
您可以看到脚本完成后自动显示输出窗口已在Keywords.txt
个文件中进行了多少次替换。
if (UltraEdit.document.length > 0) // Is any file opened?
{
// Parent folder containing all the *lyrics folders.
var sParentFolder = "C:\\Temp\\Test\\";
// Define environment for this script.
UltraEdit.insertMode();
UltraEdit.columnModeOff();
// Select everything in first file.
UltraEdit.document[0].selectAll();
// Is first file not an empty file?
if (UltraEdit.document[0].isSel())
{
// Determine line terminator type for first file.
var sLineTerm = "\r\n";
if (UltraEdit.document[0].lineTerminator == 1) sLineTerm = "\n"
else if (UltraEdit.document[0].lineTerminator == 2) sLineTerm = "\r"
// Get all lines of first file into an array of strings
var asArtists = UltraEdit.document[0].selection.split(sLineTerm);
// Remove last string if it is empty because file ended with
// a line termination.
if (!asArtists[asArtists.length-1].length) asArtists.pop();
// Define once the parameters for all the replace in files executed
// below in the loop with changing directory and replace strings.
UltraEdit.frInFiles.filesToSearch=0;
UltraEdit.frInFiles.searchSubs=false;
UltraEdit.frInFiles.ignoreHiddenSubs=false;
UltraEdit.frInFiles.openMatchingFiles=false;
UltraEdit.frInFiles.searchInFilesTypes="Keywords.txt";
UltraEdit.frInFiles.regExp=false;
UltraEdit.frInFiles.matchCase=true;
UltraEdit.frInFiles.matchWord=false;
UltraEdit.frInFiles.logChanges=true;
UltraEdit.frInFiles.useEncoding=false;
UltraEdit.frInFiles.preserveCase=false;
// Run for each artist a replace of all occurrences of _1
// in the artists lyrics folder by name of the artist.
for (nArtist = 0; nArtist < asArtists.length; nArtist++)
{
// Build folder name by converting artists name to
// lower case and replacing all spaces by hyphens.
var sFolder = asArtists[nArtist].toLowerCase().replace(/ /g,"-");
// Define directory for replace in files by appending
// additionally the string "-lyrics" to folder name.
UltraEdit.frInFiles.directoryStart = sParentFolder + sFolder + "-lyrics\\";
UltraEdit.frInFiles.replace("_1",asArtists[nArtist]);
}
// The output window contains the summary information
// about the replaces made and therefore open it.
UltraEdit.outputWindow.showWindow(true);
}
}
脚本使用提供的数据进行测试,每个Keywords.txt
在6 * lyrics文件夹中恰好包含3次_1
。输出窗口的结果是:
Running script: C:\Temp\KeywordsReplace.js
============================================================
C:\Temp\Test\butta-mohamed-lyrics\Keywords.txt, 3
3 items replaced in 1 files.
C:\Temp\Test\daler-mehndi-lyrics\Keywords.txt, 3
3 items replaced in 1 files.
C:\Temp\Test\daljit-mattu-lyrics\Keywords.txt, 3
3 items replaced in 1 files.
C:\Temp\Test\darshan-khela-lyrics\Keywords.txt, 3
3 items replaced in 1 files.
C:\Temp\Test\davinder-deep-lyrics\Keywords.txt, 3
3 items replaced in 1 files.
C:\Temp\Test\davinder-deol-lyrics\Keywords.txt, 3
3 items replaced in 1 files.
Script succeeded.
如果您无法接受下载和安装UltraEdit,您必须等待提供批处理文件解决方案或Notepad ++宏解决方案的其他答案,或者您自己编写必要的代码。