it:ad:dokuwiki:howto:housecleaning

IT:AD:Dokuwiki:HowTo:HouseCleaning

Summary

Of no use to anybody else than me…

//Search
' #'

//Replace
' #'

:projects -> :Projects
:orgs -> :Orgs
:sctp -> :SCTP
:sct -> :SCT
:discovery -> :Discovery
:define -> :Define
:design -> :Design

//Search:

//Replace:

Search for:
\*Related:\*\s*(\r\n)+((\s*\*.+\r\n)+)
\*Related:\*\s+((\s*\*.+)+)

Replace with:

<div nav>

* [[../|(UP)]]
{{indexmenu>.#2|nsort tsort}}


IT
AD
PM
MOE
ADFS
ASP
ASP.NET
NET

void Main()
{
	//WARNING: MAKE SURE THESE ARE SET SAFELY BEFORE RUNNING
	bool debugReplaceFileLinks = false;
    
	//directory to scan for names:
	string directoryFullName = @"Z:\Dropbox\Synced\Sites\com.skysigal\data\pages\it\about";
	//string[] subjectNames = GetListOfNames(directoryFullName);
	
//	foreach(string subject in subjectNames){
//	var t = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(subject);
//		string.Format("* [[IT/AD/Tech/{0}/]]",t).Dump();
//	}
//	//return;
	
//	var pattern = "\\[\\[IT:About:\\b(" + string.Join("|", subjectNames.ToArray()).Replace("-","\\-").Replace("+","\\+") + ")\\b([_|/|\\|])?([^\\]]*)" ;
//	pattern.Dump("Pattern");
//	string replacePattern = "[[IT/AD/Tech/$1$2$3";
	
	string check = 
@"foo bar [[IT/About/Apple/AppStore/HowTos]] pinky on...
sadf more [[IT/About/appcMd/AppStore/HowTos]]
and more [[..|(UP)]]
and blah [[..|(UP)]]
and more";

//	string replace = Regex.Replace(check, pattern, replacePattern, RegexOptions.IgnoreCase);
//	check.Dump("Original");
//	replace.Dump("Replaced");

	//return;
	//Directory to change:
	string directoryFullName2 = "x:\\dropbox\\synced\\sites\\com.skysigal\\data\\pages";

	//BreakDownDirectories(directoryFullName2, subjectNames, true);

	//Actually to some work;
	//UpdateLinksInFiles(directoryFullName2, pattern,replacePattern,debugReplaceFileLinks);


	var x = new Dictionary<string,string>();
	x.Add("IT:AD:Tech:AD:Discover", "IT:AD:ALM:6D:Discover");
	x.Add("IT:AD:Tech:AD:Define", "IT:AD:ALM:6D:Define");
	x.Add("IT:AD:Tech:AD:Design", "IT:AD:ALM:6D:Design");
	x.Add("IT:AD:Tech:AD:Develop", "IT:AD:ALM:6D:Develop");
	x.Add("IT:AD:Tech:AD:Defects", "IT:AD:ALM:6D:Defects");
	x.Add("IT:AD:Tech:AD:Deliver", "IT:AD:ALM:6D:Deliver");

	x.Add("IT:AD:Discover", "IT:AD:ALM:6D:Discover");
	x.Add("IT:AD:Define", "IT:AD:ALM:6D:Define");
	x.Add("IT:AD:Design", "IT:AD:ALM:6D:Design");
	x.Add("IT:AD:Develop", "IT:AD:ALM:6D:Develop");
	x.Add("IT:AD:Defects", "IT:AD:ALM:6D:Defects");
	x.Add("IT:AD:Deliver", "IT:AD:ALM:6D:Deliver");
	
	x.Add("IT:AD:Tech:AD:", "IT:AD:");
	
	


	check = 
@"Somethign [[IT/AD/Tech/AD/Discover/Something/]]";

	string replace = Regex.Replace(check, "IT:AD:Tech:AD:Discover", "IT:AD:6D:Discover", RegexOptions.IgnoreCase);
	check.Dump("Original");
	replace.Dump("Replaced");
	
	
	Replace(directoryFullName2,x);
}

	public void Replace(string directory, Dictionary<string,string> terms){
		var fileNames = System.IO.Directory.GetFiles(directory,"*.txt", SearchOption.AllDirectories);
		foreach(string fileName in fileNames){
			string fileText = System.IO.File.ReadAllText(fileName);
			foreach(KeyValuePair<string,string> kvp in terms){
				if (Regex.Match(fileText, kvp.Key ,RegexOptions.IgnoreCase).Success){
					fileText = Regex.Replace(fileText, kvp.Key, kvp.Value,RegexOptions.IgnoreCase);
					System.IO.File.WriteAllText(fileName,fileText);
					fileText.Dump();
				}
			}
		}
	}
// Define other methods and classes here

public String[] GetListOfNames(string directoryFullName){

	var fileNames = System.IO.Directory.GetFiles(directoryFullName,"*.txt", SearchOption.TopDirectoryOnly);
	
	string lastPrefix=null;
	List<string> results = new List<string>();
	foreach(string tmp in fileNames){
		string fileName = System.IO.Path.GetFileName(tmp);
		int pos = fileName.IndexOfAny(new []{'_','.', ' '});
		string prefix = fileName.Substring(0,pos);
//		if (prefix.Contains("_howto")){
//			prefix = prefix.Substring(0,prefix.IndexOf("_howto"));
//		}
		if (prefix==lastPrefix){continue;}
		results.Add(prefix);
		lastPrefix = prefix;
	}
	
	
	results.Remove("About");
	results.Remove("howto");
	results.Remove("tips");
	results.Remove("that");
	results.Remove("notepad");

	results.Add("notepad++");
	
	AdjustList(results, new []{
		"acad 2000",
		"active directory",
		"alert services",
		"app feature usage monitoring",

		"asp.mvc",
		"asp.net",

		"business requirements",
		"waterfall methodology",
		"angular.js",
		"backbone.js",
		"blogengine.net",
		"breeze.js",
		"browserify.js",
		"codepen.io",
		"continuous integration",
		"credit card processing",
		"cruisecontrol.net",
		"d3.js",
		"datatables.js",
		"db projects",
		"draw.io",
		"durandal.js",
		"editpad pro",
		"ema personal wiki",
		"environment variables",
		"epoch.js",
		"feature usage tracking",
		"fourier transforms",
		"functional requirements",
		"google apps",
		"internet explorer",
		"jurassic.net",
		"jsplumb.js",
		"kendo UI",
		"knockout.js",
		"knockout-validation.js",
		"knockout.punches.js",
		"log parser",
		"lusrmgr.msc",
		"m42 graphs",
		"machine learning",
		"matter.js",
		"modernizr.js",
		"nightwatch.js",
		"non-functional requirements",
		"node.js",
		"paint.net",
		"performance counters",
		"phantom.js",
		"phaser.io",
		"protocol buffers",
		"require.js",
		"reveal.js",
		"rhino mocks",
		"quartz.net",
		"secpol.msc",
		"semantic versioning",
		"sencha touch",
		"team foundation service",
		"that's nice",
		"service accounts",
		"slimer.js",
		"threat assessment",
		"windsor ioc",
		"unit testing",
		"visual studio",
		"web security",
	});
	//certificates_client
	
	for(int i=0;i<results.Count;i++){
	
		results[i] = results[i].Replace(".js",".JS");
		results[i] = results[i].Replace(".io",".IO");
		results[i] = results[i].Replace(".net",".NET");
		results[i] = results[i].Replace(" ui"," UI");
		results[i] = results[i].Replace(" ioc"," IoC");
	}
	
	results.Sort();
	
	return results.ToArray();
}

//Fix up list due to some confusion when parsing filenames,
//such as IT:Team_Foundation_Services_HowTo 
//where the break has to be before HowTo...but that isn't so easy to spot
//where there is also a file called IT:Team_Foudnation_Services_Concepts
void AdjustList(List<string> list, string[] phrases){
	foreach(string phrase in phrases){
		string[] parts = phrase.Split('.', ' ');
		foreach(string part in parts){
			list.Remove(part);
		}
		list.Add(phrase);
	}
}




void BreakDownDirectories(string directoryFullName, string[] subjectNames,bool debug){
directoryFullName.Dump("....");
	foreach(string tmp in System.IO.Directory.GetFiles(directoryFullName)){
		string fileName = System.IO.Path.GetFileName(tmp);
		string newDirectory;
		string newFile;
		int pos = fileName.IndexOfAny(new []{'_'});
		if (pos < 0){
			string d = System.IO.Path.GetFileNameWithoutExtension(fileName);			
			newDirectory = System.IO.Path.Combine(directoryFullName,d);		
			newFile = System.IO.Path.Combine(newDirectory,"home.txt");
		}else{
			string prefix = fileName.Substring(0,pos);
			string rest = fileName.Substring(pos+1);
			newDirectory = System.IO.Path.Combine(directoryFullName,prefix);
			newFile = System.IO.Path.Combine(newDirectory,rest);
		}
		newFile.Dump();
		if (!debug){
			System.IO.Directory.CreateDirectory(newDirectory);
			System.IO.File.Move(tmp, newFile);
		}
	}
}




//Update Links in Files
void UpdateLinksInFiles(string directoryFullName, string pattern, string replacement, bool debug =true){
	var fileNames = System.IO.Directory.GetFiles(directoryFullName,"*.txt", SearchOption.AllDirectories);
	fileNames.Length.Dump("To Regex Through:");

	DateTime now = DateTime.Now;
	int scanned =0;
	int matched=0;

	
	if (debug){
		"*** ATTENTION: SKIPPING REPLACEMENT (IN DEBUG MODE)".Dump();
	}
	
	foreach(string fileName in fileNames){
		string fileText = System.IO.File.ReadAllText(fileName);
		scanned++;
		if (!Regex.Match(fileText, pattern,RegexOptions.IgnoreCase).Success){continue;}
		matched++;
		fileText = Regex.Replace(fileText,pattern, replacement,RegexOptions.IgnoreCase);
		if (!debug){
			System.IO.File.WriteAllText(fileName,fileText);
		}			
	}
	string.Format("{0}/{1} in {2}",matched,scanned,DateTime.Now.Subtract(now).TotalSeconds).Dump("Results");
}

  • /home/skysigal/public_html/data/pages/it/ad/dokuwiki/howto/housecleaning.txt
  • Last modified: 2023/11/04 03:41
  • by 127.0.0.1