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

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
Link zu diesem Kommentar

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

Link zu diesem Kommentar

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
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...