Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

[Batch] Datei auslesen und Wörte in Datei schreiben





Frage

Hallo, ich habe hier eine große Datei mit vielen Kryptischen Zeichen, aber auch normalen Buchstaben: (Beispiel-datei-Ausschnitt) [code] ... "name" "-424 25744 582" "wert" "4 3 24" "pfad" "daten/datei1.rst" "klname" "hostage_entity" "pfad" "logs/datei2.pop" ... [/code] ...so, ich möchte nun eine neue Datei, die folgendes Beinhaltet: [code] /daten/datei1.rst /logs/datei2.pop [/code] und so weiter, je nachdem wieviele datei-angaben mit .rst oder .pop in der Datei stehen. Wie kann ich das am einfachsten realisieren? Habe leider kaum Ahnung von Batch...bisher hatte ich das gebaut: [code] @echo off set PF=cs_assault_2006.bsp findstr /C:".rst" %PF% > rst.txt findstr /C:".pop" %PF% > pop.txt [/code] dadurch habe ich dann 2 Dateien, die ich zusammenfügen könnte... dazu kommt aber das in der ausgelesenen Datei (oben) z.B. "datei1.rst" mehrfach vorkommt. Das müsste das Programm noch erkennen und nur einmal in die "enddatei" schreiben. Kann mir jemand dabei helfen? :-) lg

Antwort 1 von kicia

Hallo teklan,

ich würde Javascript benutzen. Ich poste hier einen Code, der Dir helfen kann, ein Script zu schreiben, daß das kann, was Du brauchst. Verlasse Dich aber bitte nicht darauf, daß er so fuktioniert, wie er hier steht.

(Zum Ausführen den Code in eine Textdatei kopieren, die Datei umbenennen in "Dateiname.js", rechtsklick darauf und "öffnen".)

Gruß,
k.

var InString  = loadfile("C:/temp/input.txt");
var OutString = "";
var i = 0;
var k = 0;
var flist = new Array();

while(i < InString.length)
{
	k = InString.indexOf(".rst", i);
	if(k > -1)
	{
		i = k + 4;
		while(InString.substr(k,1) != "\"" && k > 0)
		{
			k--;
		}
		flist.push(InString.substr(k, i - k));
	}
	else
	{
		i++;
	}
}

flist.sort();

if(flist.length > 0)
{
	i = 1;
	OutString += flist[0] + "\r\n";
	while(i < flist.length)
	{
		if(flist == flist[i-1])
		{
			flist.splice(i,1);
		}
		else
		{
			OutString += flist + "\r\n";
			i++;
		}
	}
}

WScript.Echo(OutString);
//savefile("C:/temp/output.txt");


//--------------------------------- 
function loadfile(FileName)
{
	var fso,f1;
	var FileStr = "";
	fso = new ActiveXObject("Scripting.Filesystemobject");
	if(fso.FileExists(FileName))
	{
		f1 = fso.OpenTextFile(FileName, 1);
		if(f1.AtEndOfStream) WScript.Echo("ERROR: Die Datei ist leer"); else FileStr = f1.ReadAll();
		f1.close();
	}
	else { WScript.Echo("Datei nicht gefunden! --->" + FileName + ""); }
	return FileStr;
}

//--------------------------------- 
function savefile(FileName,str)
{
	var fso, folder, file, foldername;
	function getfoldername(s)	{		var i, m;		for (i=0;i<s.length;i++) { if(s.substr(i,1)=="/"||s.substr(i,1)=="\\") m = i; }		return s.substr(0,m);	}
	fso = new ActiveXObject("Scripting.Filesystemobject");
	foldername = getfoldername(FileName);
	if(fso.FolderExists(foldername))
	{
		folder = fso.Getfolder(foldername);
		if(folder.attributes!=16&&folder.attributes!=48)
		{
			WScript.Echo("[savefile] kann auf Verzeichnis nicht zugreifen ---><b>" + foldername + "</b> (att:" + folder.attributes + ")");
			return false;
		}
		if(fso.FileExists(FileName))
		{
			file = fso.GetFile(FileName);
			if(file.attributes!=0&&file.attributes!=32)
			{
				WScript.Echo("[savefile] kann auf Datei nicht zugreifen ---><b>" + FileName + "</b> (att:" + file.attributes + ")");
				return false;
			}
		}
		file = fso.OpenTextFile(FileName, 2, true);
		file.write(str);
		file.close();
	}
	else
	{
		WScript.Echo("Verzeichnis nicht gefunden! ---><b>" + foldername + "</b>");
	}
}


Antwort 2 von batti-batch

Hallo teklan,


mit einer Batch-Datei ist Dein Problem schnell und einfach lösbar.

Ich habe Dir ein kleines Programm geschrieben, das Du mühelos Deinen Bedürfnissen anpassen kannst.

@ECHO off
SETLOCAL

REM Testprogramm zum Schreiben von
REM rst- und pop-Datensaetzen in zwei Dateien


SET "PF=cs_assault_2006.bsp"
SET "rst=c:\ausgabe\rst.txt"
SET "pop=c:\ausgabe\pop.txt"

ECHO Datensaetze mit rst > %rst%
ECHO Datensaetze mit pop > %pop%

FOR /f "delims=" %%i IN ('FINDSTR . "%PF%" ^| FINDSTR /c:".rst" ') DO ECHO %%i>> %rst%

FOR /f "delims=" %%i IN ('FINDSTR . "%PF%" ^| FINDSTR /c:".pop" ') DO ECHO %%i>> %pop%


Dieses Programm lässt sich auch erweitern, falls Du z.B. in den Ausgabedateien keine Anführungszeichen haben möchtest...

Viel Spass beim Testen.

Herzliche Grüße
batti-batch

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: