www.digitalmars.com Home | Search | C & C++ | D | DMDScript | News Groups | index | prev | next
Archives

D Programming
D
D.gnu
digitalmars.D
digitalmars.D.bugs
digitalmars.D.dtl
digitalmars.D.ide
digitalmars.D.dwt
digitalmars.D.announce
digitalmars.D.learn
digitalmars.D.debugger

C/C++ Programming
c++
c++.announce
c++.atl
c++.beta
c++.chat
c++.command-line
c++.dos
c++.dos.16-bits
c++.dos.32-bits
c++.idde
c++.mfc
c++.rtl
c++.stl
c++.stl.hp
c++.stl.port
c++.stl.sgi
c++.stlsoft
c++.windows
c++.windows.16-bits
c++.windows.32-bits
c++.wxwindows

digitalmars.empire
digitalmars.DMDScript
electronics



digitalmars.D.announce - A few lines of code to clean the trace.log produced by DMD

Demangles the names. Needs tangobos.

------------------------------

import tango.io.File;
import tango.io.FileConduit;
import tango.text.Util;
import tango.io.Stdout;
import tango.io.Print;
import tango.text.convert.Layout;
import Regex;
import std.demangle;

pragma(lib,"tangobos.lib");

void main(char[][] argv)
{
	char[] filein="trace.log";
	char[] fileout="trace.fixed.txt";
	if(argv.length>1) filein=argv[0];
	if(argv.length>2) filein=argv[1];

	auto buf=cast(char[])File(filein).read;
	buf=buf[locatePattern(buf,"======== Timer Is")..$];
	uint nl=0;
	for(uint c=0;c<buf.length;)
	{
		if(buf[c++]=='\n')
		{
			if(++nl==5)
			{
				auto print = new Print!(char)(new Layout!(char),new
FileConduit(fileout,FileConduit.WriteCreate));
				print(buf[0..c]);
				foreach(line;lines(buf[c..$]))
				{
					 foreach(m; Regex.Regex(r"(\s*\d+)(\s*\d+)(\s*\d+)(\s*\d+)(\s*)([^$]+)").search(line))
					 {
						 print(m.match(1))(m.match(2))(m.match(3))(m.match(4))(m.match(5))(demangle(m.match(6))).newline;
					 }
				}
				break;
			}
		}
	}
}
Apr 09 2008