Jump to content

Textdatei nach Werten durchsuchen per batch/vbs


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Geschrieben (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 von user1977
Geschrieben

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

Geschrieben (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 von Cybquest
Kleine Codeänderung
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...