I've got a lot of files (>1.000), each file is in a unique directory. What I want to do is replace a string (constant) within each file, with the directory path that the file in question is located in. Is this possible?
Replace in all files a placeholder string with the directory/name of the file
Replace in all files a placeholder string with the directory/name of the file
Not with a simple find and replace action. You need a script for this task. The most difficult jobs for this script are already done, see
Function to get list of files into an edit window
General file name evaluating functions
Here is the small script which worked on examples I quickly created for testing.
You have to download and copy function GetListOfFiles into your script file and adapt it according to the description if you are not working with the English version of UltraEdit or when you have modified the find output format settings in the configuration dialog.
You also have to download the script file with the file name functions and copy function GetFilePath into your script file.
Last you have to adapt the 3 strings for initial directory "C:\\Temp\\", file types "*.tmp" and search string "%current directory%" according to your environment.
Function to get list of files into an edit window
General file name evaluating functions
Here is the small script which worked on examples I quickly created for testing.
Code: Select all
UltraEdit.ueReOn();
if (GetListOfFiles(0,"C:\\Temp\\","*.tmp",true)) {
UltraEdit.activeDocument.selectAll();
var sFileNamesList = UltraEdit.activeDocument.selection;
var asFileNames = sFileNamesList.split("\r\n");
var nFileCount = asFileNames.length;
if (!asFileNames[nFileCount-1].length) nFileCount--;
UltraEdit.frInFiles.directoryStart="";
UltraEdit.frInFiles.filesToSearch=0;
UltraEdit.frInFiles.ignoreHiddenSubs=false;
UltraEdit.frInFiles.logChanges=true;
UltraEdit.frInFiles.matchCase=true;
UltraEdit.frInFiles.matchWord=false;
UltraEdit.frInFiles.preserveCase=false;
UltraEdit.frInFiles.searchSubs=false;
UltraEdit.frInFiles.regExp=false;
UltraEdit.frInFiles.unicodeSearch=false;
while(nFileCount--) {
var sFilePath = GetFilePath(asFileNames[nFileCount]);
UltraEdit.frInFiles.searchInFilesTypes=asFileNames[nFileCount];
UltraEdit.frInFiles.replace("%current directory%",sFilePath);
}
}
You also have to download the script file with the file name functions and copy function GetFilePath into your script file.
Last you have to adapt the 3 strings for initial directory "C:\\Temp\\", file types "*.tmp" and search string "%current directory%" according to your environment.
I want to replace a specific string that occurs in 6000 files (file0001.htm-file6000.htm for this example) with the name of each of those files.
[\./]*thisdirectory/thisfilename.html is the UltraEdit regular expression search string to find thisdirectory/thisfilename.html appearing in all 6000+ files, but in different depths ../, ../../, etc.
Every found string in each of the files should be replaced with the name of the file. I don't need any relative paths because all of these files are in the same directory.
"file0001.htm"
....
"file6000.htm"
[\./]*thisdirectory/thisfilename.html is the UltraEdit regular expression search string to find thisdirectory/thisfilename.html appearing in all 6000+ files, but in different depths ../, ../../, etc.
Every found string in each of the files should be replaced with the name of the file. I don't need any relative paths because all of these files are in the same directory.
"file0001.htm"
....
"file6000.htm"
See my first post for an explanation of the script below with the small changes needed for your task.
In comparison to the script in my first post I have enabled regular expression search using UltraEdit engine. I have replaced GetFilePath by GetNameOfFile, so you have to embed GetNameOfFile into the script file. I have replaced the search string with your expression. And I have renamed the string variable. Finally I have changed *.tmp to *.htm in second line.
So you have to set only the initial directory correct in first line and insert the 2 functions GetListOfFiles and GetNameOfFile at top of the script file.
Code: Select all
UltraEdit.ueReOn();
if (GetListOfFiles(0,"C:\\Temp\\","*.htm",true)) {
UltraEdit.activeDocument.selectAll();
var sFileNamesList = UltraEdit.activeDocument.selection;
var asFileNames = sFileNamesList.split("\r\n");
var nFileCount = asFileNames.length;
if (!asFileNames[nFileCount-1].length) nFileCount--;
UltraEdit.frInFiles.directoryStart="";
UltraEdit.frInFiles.filesToSearch=0;
UltraEdit.frInFiles.ignoreHiddenSubs=false;
UltraEdit.frInFiles.logChanges=true;
UltraEdit.frInFiles.matchCase=true;
UltraEdit.frInFiles.matchWord=false;
UltraEdit.frInFiles.preserveCase=false;
UltraEdit.frInFiles.searchSubs=false;
UltraEdit.frInFiles.regExp=true;
UltraEdit.frInFiles.unicodeSearch=false;
while(nFileCount--) {
var sFileName = GetNameOfFile(asFileNames[nFileCount]);
UltraEdit.frInFiles.searchInFilesTypes=asFileNames[nFileCount];
UltraEdit.frInFiles.replace("\"[\\./]*thisdirectory/thisfilename.html\"","\""+sFileName+"\"");
}
}
So you have to set only the initial directory correct in first line and insert the 2 functions GetListOfFiles and GetNameOfFile at top of the script file.