online 1
gast (50)

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

Anwendungen(Java,C++...)Anwendungen(Java,C++...)

Fragevon teklan vom 12.10.2019, 08:25 Options

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

Hallo,

ich habe hier eine große Datei mit vielen Kryptischen Zeichen, aber auch normalen Buchstaben:
(Beispiel-datei-Ausschnitt)

...
"name" "-424 25744 582"
"wert" "4 3 24"
"pfad" "daten/datei1.rst"
"klname" "hostage_entity"
"pfad" "logs/datei2.pop"
...

...so, ich möchte nun eine neue Datei, die folgendes Beinhaltet:

/daten/datei1.rst
/logs/datei2.pop

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:

@echo off
set PF=cs_assault_2006.bsp
findstr /C:".rst" %PF% > rst.txt
findstr /C:".pop" %PF% > pop.txt


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 schreiben

Antwort 1 von kicia vom 16.10.2019, 08:45 Options

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[i] == flist[i-1])
		{
			flist.splice(i,1);
		}
		else
		{
			OutString += flist[i] + "\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 vom 22.10.2019, 11:08 Options

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

Ähnliche Themen

Auslesen von Dateinamen und in einer neuen Datei schreiben über ein Batch
Harry2300  23.01.2007 - 71 Hits - 8 Antworten

.Bat schreiben
Chrisyn  27.02.2007 - 274 Hits -

Batch Datei schreiben
Syril  02.03.2007 - 111 Hits - 1 Antwort

Batch Datei schreiben (Datei verschieben)
NinerForever  03.11.2007 - 185 Hits - 11 Antworten

Batch datei schreiben
sirblacksoul  25.05.2008 - 52 Hits - 9 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026