user1977 10 Geschrieben 16. Juni 2009 Melden Teilen Geschrieben 16. Juni 2009 (bearbeitet) Hallo, ich bin neu hier und begrüsse erstmal das Forum. Ich habe hier schon sehr viel gelesen und mir Tips und Hilfen rausgesucht, doch jetzt habe ich selbst ein Anliegen, für viele von euch wahrscheinlich ein klacks, aber ich krieg es einfach nicht hin. Vorab, ich bin kein Programmierspezialist würde aber gern folgendes per Batch oder auch vbs realisieren... Ich habe eine grosse Textdatei aus der ich bestimmt Werte auslesen und in eine neue Textdatei schreiben möchte. In der Textdatei steht z.B. folgendes: viel textmitsonderzeichenviel textmitsonderzeichen viel textmitsonderzeichen viel textmitsonderzeichenviel textmitsonderzeichenviel textmitsonderzeichen viel textmitsonderzeichen Aktenz : A 12345-09 viel textmitsonderzeichenviel textmitsonderzeichen viel textmitsonderzeichenviel textmitsonderzeichen viel textmitsonderzeichenviel textmitsonderzeichenviel textmitsonderzeichen# Ergebnis: 2,34 cm viel textmitsonderzeichenviel textmitsonderzeichen viel textmitsonderzeichenviel textmitsonderzeichenviel textmitsonderzeichen viel textmitsonderzeichenviel textmitsonderzeichenviel textmitsonderzeichenviel textmitsonderzeichen viel textmitsonderzeichenviel textmitsonderzeichenviel textmitsonderzeichen viel textmitsonderzeichenviel textmitsonderzeichenviel textmitsonderzeichen Aktenz : A 23456-09 textmitsonderzeichenviel textmitsonderzeichen viel textmitsonderzeichenviel textmitsonderzeichenviel textmitsonderzeichen viel textmitsonderzeichenviel textmitsonderzeichenviel textmitsonderzeichen Ergebnis: 1,75 cm ... Nun soll das Script nur die Nummer des Aktenz. (A xxxxx-09) und den Ergeniswert x,xx in eine neue Textdatei schreiben. Das Ausgabeformat sollte so aussehen: A 12345-09 2,34 A 23456-09 1,75 A xxxxx-09 x,xx A xxxxx-09 x,xx usw... Die Anzahl und Position (Zeile) des Aktenz. und des Ergenisses sind nicht immer gleich, aber zu jedem AZ gehört ein Ergebnis. Wäre echt super wenn mir jemand helfen kann, ich vermute, dass es über den findstr-Befehl oder auch for /f funktionieren müsste aber ich kreigs nicht hin und blick auch nicht richtig durch. Ich hoffe ich habe es verständlich erklärt?! /edit -> Was ich bis jetzt versucht habe ist folgendes: ****************************** @echo off set PF=c:\quelle.txt findstr /C:"Aktenz." %PF% > akt.txt findstr /C:"Ergebnis" %PF% > erg.txt copy akt.txt+erg.txt res.txt ****************************** -> das kommt in der res.txt raus Aktenz. : A 38552-09 Aktenz. : A 38553-09 Aktenz. : A 38554-09 Aktenz. : A 38555-09 Ergebnis : 0,24 cm Ergebnis : 0,00 cm Ergebnis : 1,44 cm Ergebnis : 0,59 cm Ich bekomme es einfach nicht hin NUR die Aktenz. und NUR die Ergebnisse und diese auch noch hintereinander in eine Textdatei zu schreiben, die beiden akt.txt+erg.txt könnten sogar anschliessend gelöscht werden, auch da haperts :( Würde mich sehr freunen wenn jemand helfen kann Vielen Dank für Beiträge! Gruss user1977 bearbeitet 16. Juni 2009 von user1977 Zitieren Link zu diesem Kommentar
d.stegemann 10 Geschrieben 16. Juni 2009 Melden Teilen Geschrieben 16. Juni 2009 Hallo user1977, hier ein kleines Schnippselchen... o_file1 = "\akt.txt" o_file2 = "\erg.txt" output = "\output.txt" Set oFSO = CreateObject("Scripting.FileSystemObject") folder = oFSO.GetFolder(".") If oFSO.FileExists(folder & output) Then oFSO.DeleteFile(folder & output) End If ' Da output nicht vorhanden kreieren. Set f_mergefile = oFSO.CreateTextFile(folder & output, True) Set reader = oFSO.OpenTextFile(folder & o_file1) Set reader1 = oFSO.OpenTextFile(folder & o_file2) Do Until reader.AtEndofStream str_tmp = reader.ReadLine str_akt = trim(mid(str_tmp, instr(str_tmp, ":") +1, len(str_tmp)- instr(str_tmp, ":")-1)) str_tmp = reader1.ReadLine str_erg = trim(mid(str_tmp, instr(str_tmp, ":") +1, len(str_tmp)- instr(str_tmp, ":")-3)) f_mergefile.WriteLine "" & str_akt &" "& str_erg &"" Loop Davon ausgehend, das du dieses File als vbs speicherst und in dem Verzeichnis ablegst in dem deine beiden Textdateien sind, sollte das funktionieren. Ist auch ein kleiner Teil drin in dem das Outputfile gelöscht wird. Solltest du also ohne Probleme auf deine Problematik portieren können. Gruß Dirk Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 16. Juni 2009 Melden Teilen Geschrieben 16. Juni 2009 Powershell, ungetetest: get-content file.txt | % { if($_ -match "Aktenz"){ $_ | out-file aktenz.txt -append }elseif($_ -match "Ergebnis"){ $_ | out-file ergebnis.txt -append } } Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 17. Juni 2009 Melden Teilen Geschrieben 17. Juni 2009 (bearbeitet) Hier was ohne Umweg über die zwei Dateien: Set MyShell=wscript.CreateObject("Wscript.Shell") Set fso = CreateObject("Scripting.FileSystemObject") Const ForReading = 1, ForWriting = 2 strSourceFile = "J:\DIV\Fürze\Quelle.txt" strDestFile = "J:\DIV\Fürze\Ziel.txt" Set fin = fso.OpenTextFile(strSourceFile, ForReading) Set fout = fso.OpenTextFile(strDestFile, ForWriting, True) do while not fin.AtEndOfStream strInLine = fin.Readline if instr(strInLine, "Aktenz") > 0 then strOutLine = mid(strInLine,10) end if if instr(strInLine, "Ergebnis") > 0 then strOutLine = strOutLine & " " & mid(strInLine,11) fout.writeline strOutLine end if Loop bearbeitet 17. Juni 2009 von Cybquest Kleine Codeänderung Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.