Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Werte aus grosser Textdatei per batch oder vbs

Frage Entwicklung Batch & Shell

Mitglied: pacmac

pacmac (Level 1) - Jetzt verbinden

16.06.2009, aktualisiert 14:48 Uhr, 5786 Aufrufe, 11 Kommentare

Hallo an alle,

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 auch hier ein paar Sachen gefunden die in die Richtung gehen, aber irgendwie bin ich jetzt durcheinander.

Ich habe eine grosse Textdatei aus der ich bestimmte 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 Position (Zeile) des Aktenz. und des Ergenisses sind nicht immer gleich, aber die Zeichenanzahl (auch Leerzeichen) in der Zeile bleiben gleich (also Aktenz : A xxxxx-xx und Ergebnis : 1,75 cm) und 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 kriegs nicht hin und blick auch nicht mehr 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.


Würde mich sehr freuen wenn jemand helfen kann
Vielen Dank für Beiträge!

Gruss pacmac
Mitglied: LotPings
16.06.2009 um 15:12 Uhr
Hallo pacmac,

wenn gewährleistet ist, das Aktenz und Ergebnis immer paarweise auftreten, merkst du dir einfach das Aktenzeichen und gibst es mit jedem Ergebnis aus. Das ^ in findstr sorgt für einen Anker am Zeilenanfang.

01.
@Echo off&setlocal EnableDelayedExpansion 
02.
Set OutFile=^>^>"C:\Test\Res.txt" 
03.
Set "InFile=C:\Test\Test.txt" 
04.
For /f "tokens=1-3 delims=: " %%A in ( 
05.
 'Findstr /i "^Aktenz ^Ergebnis" "%InFile%"' 
06.
 ) do If "%%A"=="Aktenz" ( 
07.
 set "AZ=%%B %%C" 
08.
 ) Else ( 
09.
%OutFile% Echo/!AZ! %%B 
10.
11.
 
Gruß
LotPings

Ausgabeumleitung ergänzt.
Edit2 Anführungszeichen verschoben in Zeile 02
Bitte warten ..
Mitglied: 60730
16.06.2009 um 15:14 Uhr
Servus und auch dir ein herzliches Willkommen,

dein "Problem" ist folgendes:
die Batch läuft jede Zeile nacheinander ab und deswegen kommen zuerst alle im ersten Schritt gefilterten Infos und dann die im zweiten Schritt.

01.
@echo off 
02.
set PF=c:\quelle.txt 
03.
findstr "Aktenz. Ergebnis" %PF%>res.txt
sollte - mit deinem Ansatz weitergedacht - eher zum Ziel führen.
Ist aber "ungetestet" und da du Sonderzeichen schreibst, vielleicht nicht die richtig wahre Lösung deines Problems.

Try it.

Gruß

edit ... da war ich wohl etwas langsam..../edit
Bitte warten ..
Mitglied: sebuba
16.06.2009 um 15:44 Uhr
Ich weiß nicht ob ich das Problem verstanden habe .. aber falls nicht wirst dich ja noch melden ;)
würd es so angehen:
  
@echo off 
for /f "tokens=*" %%x in ('type C:\Temp\newprobs\quelle.txt') do call :findit %%x 
pause 
goto :eof 
 
:findit 
if "%1"=="Aktenz." echo "%1 %2 %3" >> C:\Temp\newprobs\res.txt 
if "%1"=="Ergebnis." echo "%1 %2" >> C:\Temp\newprobs\res.txt
%1 , %2 bzw. wie viel du von der Zeile mitnehmen willst, hängt natürlich von der Quelle bzw. dem Ziel ab.
ja war auch nicht grad der schnellste, lol .. ja grundideen hast ja jetzt
lg
Bitte warten ..
Mitglied: pacmac
16.06.2009 um 18:47 Uhr
Hallo zusammen und erstmal vielen Dank für die Vorschläge!

Leider lüppt das immernoch nicht...am nächsten kommt noch das script von Timo, dann erhalte ich (mit dem Besipieltext von oben) dies Resultat:

Aktenz : A 12345-09
Ergebnis : 2,34 cm
Aktenz : A 23456-09
Ergebnis : 1,75 cm

Allerdings benötige ich nur das jeweilige Aktenzeichen und nur das Ergebnis (also ohne Aktenz :/Ergebnis : davor und ohne cm Angabe) in einer Zeile, so dass der Inhalt der Ausgabedatei wie folgt aussieht:

A 12345-09 2,34
A 23456-09 1,75
A XXXXX-09 X,XX
A XXXXX-09 X,XX
usw...

..hättet Ihr noch ein Idee?
Wie gesagt ich bin nicht so bewandert mit batch, wurde aber vom Chef "verdonnert" (Sie kümmern sich )
Die Ausgabedatei ist zur Übermittlung für eine Arztpraxis gedacht, die das nur in dem Format einlesen können. Der Beispieltext ist praktisch ein Auszug einer Protokolldatei aus der ich nun diese Zeilen filtern muss. Ich dachte eigentlich, dass ich das mit meinen laienhaften Kenntnissen hinbekomme, doch wie man sieht... sah erst ganz einfach aus *g*

Ich studiere gerade ein wenig in wikibooks über batch zwecks "Umformatierung", vielleicht habt Ihr ja noch ne Lösung?!

Nochmals Vielen Dank!
Gruss pacmac
Bitte warten ..
Mitglied: LotPings
16.06.2009 um 18:55 Uhr
Ich habe deinen Beispieltext von oben kopiert und damit erzeugt meine Batchdatei exakt die von dir gewünschte Ausgabe. Etwas an deinen Angaben scheint also nicht mit der Realität übereinzustimmen.

Gruß
LotPings
Bitte warten ..
Mitglied: pacmac
16.06.2009 um 21:11 Uhr
Ui das ging fix, sorry war kochen...

danke für die Hilfe, aber entweder habe ich was auf den Augen oder ich bin zu blöd...wenn ich meinen Beispieltext als neue Textdatei im Ordner C:\Test anlege und dein unverändertes Script als Lot.bat von C: laufen lasse, bekomme ich über cmd 2x die Meldung "Das System kann den angegebenen Pfad nicht finden". *confused* Ich hab die Prozedur jetzt ein paar Mal gemacht, wie gesagt in deiner Batch keine Pfade angepasst und den obigen Text in C:\Test\Test.txt gespeichert...

Ich zweifle grad an mir selbst, kannst du mir die Augen öffnen?

Gruss
pacmac

edit: achso das mit den Ankerpunkten kann ich so ziemlich nachvollziehen ;)
Bitte warten ..
Mitglied: LotPings
16.06.2009 um 21:28 Uhr
Hallo pacmac,

sorry, die nachträglich eingefügte Änderung ist schuld.
Ich habe es zu gut gemeint. Das vordere Anführungszeichen in Zeile 02 gehört vor D: oder die carets ^^ müssen weg.

Ich ändere es jetzt oben nochmal.

Dann klappts auch.

Gruß
LotPings
Bitte warten ..
Mitglied: pacmac
16.06.2009 um 22:15 Uhr
Hallo,

das sieht ja wirklich gut aus! Ich probiere es morgen im Job mit der Originaldatei, ich geb dann nochmal bescheid! Danke!


Gruss und schönen Abend!
pacmac
Bitte warten ..
Mitglied: sebuba
17.06.2009 um 06:57 Uhr
Hallo pacmac,

habs mir jez nochmals durchgelesen, und mich gewundert wieso mein skript nicht funktioniert ;) .. also es waren nur mittels % .. zu ändern, und natürlich wonach du filterst. Hab das auf alle Fälle jez anpasst .. der vollständigkeithalber? :D

  
@echo off 
for /f "tokens=*" %%x in ('type C:\Temp\newprobs\btch\quelle.txt') do call :findit %%x 
pause 
goto :eof 
 
:findit 
if "%1"=="Aktenz" echo %3 %4 >> C:\Temp\newprobs\btch\res.txt 
if "%1"=="Ergebnis" echo %3 %4 >> C:\Temp\newprobs\btch\res.txt
Bitte warten ..
Mitglied: LotPings
17.06.2009 um 10:10 Uhr
Hallo sebuba,

weil du dich um eine Lösung bemühst hier ein paar wohlgemeinte Hinweise von mir:
  • findstr ist sehr viel effizienter bei großen Dateien und hat auch keine Probleme mit Sonderzeichen oder auch "verifteten" Zeichen wie &<|>.
  • Anders als bei einer for Schleife mit delims hast du bei der Übertragung von Parametern per Call nicht die Möglichkeit bestimmte Trenner wie das Komma auszuschliessen. In deiner Batchdatei wird es entfernt.
  • In deiner Batchdatei werden die gefundenen Zeilen auch nicht wie gewünscht zusammengefasst.
  • Auch bei solch kleinen Batchdateien ist es sinnvoll Ein-/Ausgabedateien über eine Variable zu bestimmen, es erleichtert die Anpassung an die jeweilige (Test-)Umgebung.
  • Eine Batchdatei lässt sich mit Zeilennummern viel einfacher kommentieren, dafür gibt es die Tags < code> und < /code>.
  • Wenn du Ausgaben in eine Datei umleitest ist es nicht immer gewünscht das auch das Leerzeichen vor dem >> in der Datei erscheint, man kann dann einfach die Umleitung vor dem Befehl plazieren.

Hier eine angepasste Version deiner Batchdatei, welche den Vorgaben entsprricht, aber ggfs eben Probleme mit Sonderzecihen hat und deutlich langsamer sein dürfte als meine obige Version (was sich aber nur bei großen Dateien auswirkt).

01.
::Sebuba.cmd :::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
02.
@echo off 
03.
Set OutFile=^>^>".\res.txt" 
04.
Set InFile=.\test.txt 
05.
for /f "tokens=*" %%x in ('type %InFile%') do call :findit %%x  
06.
pause  
07.
goto :eof  
08.
:findit  
09.
if "%1"=="Aktenz" set AZ=%3 %4 
10.
if Not "%1"=="Ergebnis" goto :Eof 
11.
%OutFile% echo %AZ% %3,%4
Gruß
LotPings
Bitte warten ..
Mitglied: sebuba
17.06.2009 um 11:22 Uhr
Na dann sag ich herzlichen Dank, .. und mir leuchten die Punkte ein!
Danke

lg
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Wert aus Registry in Textdatei speichern - Batch oder VBS
gelöst Frage von ResolvBatch & Shell2 Kommentare

Hallo in die Runde, ich habe es leider nicht so mit Batch und Co. Ich würde gerne die letzen ...

Batch & Shell
VBS Script in eine Textdatei ausgeben (VBS mit Batch zusammenführen)
gelöst Frage von Luuke257Batch & Shell5 Kommentare

Hallo zusammen! Vorweg, ich bin absoluter neuling im Scripten, ich habe mir das alles nur so zusammengebastelt und versuche ...

VB for Applications
VBS-Entfernen von Zeilen in einer Textdatei
Frage von Calim3roVB for Applications5 Kommentare

Hallo zusammen Ich möchte aus einer Textdatei Zeilen entfernen. Ich habe drei Dateien, in Datei "A" stehen Wörter, in ...

Batch & Shell
Wert aus einer CSV Datei in einer Textdatei importieren
Frage von Bmaze5Batch & Shell1 Kommentar

Hallo zusammen, ich bin neu im Forum und hoffe ich auf eure Unterstützung. Ich möchte gerne mit Hilfe von ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 26 MinutenWindows 10

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 2 StundenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 16 StundenInternet2 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 20 StundenDSL, VDSL1 Kommentar

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement21 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...

Windows Server
Anmeldung direkt am DC nicht möglich
Frage von ThomasGrWindows Server16 Kommentare

Hallo, ich habe bei unserem Server 2016 Standard ein Problem. Keine Ahnung wie das auf einmal passiert ist. Ich ...

TK-Netze & Geräte
VPN-fähige IP-Telefone
Frage von the-buccaneerTK-Netze & Geräte14 Kommentare

Hi! Weiss noch jemand ein VPN-fähiges IP-Telefon mit dem man z.B. einen Heimarbeitsplatz gesichert anbinden könnte? Habe nur einen ...