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 Bestimmte Stellen von Textdateien auslesen und in neue Datei schreiben

Mitglied: Mikefield

Mikefield (Level 1) - Jetzt verbinden

28.01.2009, aktualisiert 23:54 Uhr, 5979 Aufrufe, 11 Kommentare

Werte aus Reportdateien extrahieren und in eine Datei schreiben, zwecks späterem Excel Import

Hallo in die Runde, das ist ein Superforum und eine wahre Fundgrube. Habe schon viel versucht und noch mehr gesucht. Aber nun bin ich doch am Ende meines Halbwissens. Ich habe hier Textdateien die täglich erstellt und mit dem aktuellen Datum versehen werden. Am Monatsende sollen diese Textdateien ausgewertet und die Resultate in einer Datei geschrieben werden. Aus diesen Dateien benötige ich zum einen den Wochentag aus der ersten Zeile und 3 Textelemente aus der 3. Zeile. Diese Textelemente habe ich mit "" gekennzeichnet, diese sind dort sonst nicht enthalten. Dummerweise greift hier die for Schleife nur bei den ersten beiden Werten, aber "Tokens=" geht nur bis 31. Set /P geht auch nicht, da die Zahlen unterschiedliche Längen haben und so immer wieder variieren. lmld_2009-01-23.txt
01.
2009-01-23  7:02 PM  -  textblablabla 
02.
 
03.
"20090123" 1903 0 0 0 0 0 0 "3" 6276 963 119 80 174 27 102 85 95 60 43 110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 102 30 5 5 5 3 5 5 4 4 4 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0     "16.8"    475.2      0.6      0.1 0     16.1 1
Das Ergebnis soll wie folgt aussehen, pro Datei eine Zeile, diese soll später mal in Excel impoertiert werden :
20090123;23;3;16.8
20090124;24;5;18.6
.
.
.

Soweit bin ich für die 3. Zeile schon mal gekommen, aber wie nun weiter? Die erste Zeile für sich bekomme ich auch nicht separiert. OK, das Datum kann man auch aus 20090123 nehmen, die 23. Aber da hilft die for Schleife auch nicht viel weiter. Und alle Werte sollen ja in einer Zeile stehen ....
01.
@Echo off 
02.
setlocal EnableDelayedExpansion 
03.
for /f "delims=" %%a in ('Dir /b /o:n lmld*.txt') do ( 
04.
for /f "skip=2 delims=" %%b in ('"type %%a"') do (
Ich bedanke mich schon mal im Voraus. Es gibt noch weitere Dateien die ähnlich aufgebaut sind, aber diese hier ist der größte Knackpunkt und ich denke wenn das funktioniert, kann ich die anderen davon ableiten.

mf
Mitglied: bastla
28.01.2009 um 22:59 Uhr
Hallo Mikefield und willkommen im Forum!

Vielleicht solltest Du noch erklären, wie die letzte Textstelle zu finden ist - als Token Nr 138 (mit Leerzeichen oder TAB als Delimiter) oder als erster Dezimalwert (mit ".") ...

Grüße
bastla
Bitte warten ..
Mitglied: Mikefield
28.01.2009 um 23:39 Uhr
Das ist es ja. ich hatte es mit der Leerstelle versucht, aber ab Token größer 31 wurde kein Wert mehr ausgegeben. Mit TAB oder Dezimalwert habe ich es nicht versucht, wußte nicht wie.

mf
Bitte warten ..
Mitglied: bastla
29.01.2009 um 00:15 Uhr
Hallo Mikefield!

Eigentlich würde ich in diesem Fall ja eher zu VBScript greifen, aber so recht und schlecht (und frei von jeder Eleganz ) müsste sich das doch auch in Batch machen lassen:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "Erg=D:\Ergebnisdatei.txt" 
03.
 
04.
if exist "%Erg%" del "%Erg%" 
05.
 
06.
for /f "delims=" %%a in ('Dir /b /o:n lmld*.txt') do ( 
07.
    set Zeile= 
08.
    for /f "usebackq delims=" %%b in ("%%a") do if not defined Zeile set "Zeile=%%b" 
09.
    call :ProcessLine1 "!Zeile!" 
10.
 
11.
    set Zeile= 
12.
    for /f "usebackq skip=2 delims=" %%b in ("%%a") do if not defined Zeile set "Zeile=%%b" 
13.
    call :ProcessLine3 !Zeile! 
14.
15.
goto :eof 
16.
 
17.
:ProcessLine1 
18.
for /f "tokens=3 delims=- " %%i in (%1) do set "Tag=%%i" 
19.
goto :eof 
20.
 
21.
:ProcessLine3 
22.
set "Datum=%~1" 
23.
set "Wert2=%~9" 
24.
for /L %%i in (1,1,137) do shift 
25.
set "Wert3=%~1" 
26.
 
27.
>>"%Erg%" echo %Datum%;%Tag%;%Wert2%;%Wert3% 
28.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Mikefield
29.01.2009 um 19:24 Uhr
Hallo bastla,

was soll ich sagen, es funktioniert! Vielen Dank!!!
Auch wenn ich nur zum Teil verstehe was da passiert.
Die erste for Schleife ist klar, aber dann die Zweite, da haperts:
01.
for /f "usebackq delims=" %%b in ("%%a") do if not defined Zeile set "Zeile=%%b" 
02.
    call :ProcessLine1 "!Zeile!"
Dieses if not defined Zeile set "Zeile=%%b" will sich mir nicht erklären. Und dann zum Schluß, das "!Zeile!" wie verknüpfen die beiden sich? Hier wird ja nur Zeile 1 ausgewertet, wie wird dieses eingegrenzt?
Zu ProcessLine3, hätte man da nicht auch für den Wert3 ein "Wert3=%~137" setzen können?


Herzlichst
mf
Bitte warten ..
Mitglied: bastla
29.01.2009 um 19:43 Uhr
Hallo Mikefield!

Allgemein: Mit "if defined Variable" kann überprüft werden, ob es die Variable bereits gibt.

Da ich vorweg mit "set Zeile=" die Variable %Zeile% lösche, ist beim ersten Durchlaufen der "for"-Schleife diese Variable nicht vorhanden ("not defined") und wird daher mit dem Inhalt der Zeile 1 erstellt. Bei jedem weiteren Durchlauf ist die Variable dann aber schon da, sodass sie nicht mehr neu gesetzt wird und nach der Schleife daher immer noch die Zeile 1 enthält.

Die Schreibweise "!Zeile!" anstelle von "%Zeile%" ist bei Verwendung von "delayedExpansion" erforderlich - letzteres wiederum wird benötigt, damit schon innerhalb der (äußeren) "for"-Schleife auf den Inhalt der neu erstellten Variablen zugegriffen werden kann - und diese wird benötigt, damit sie an das Unterprogramm als Liste von Parametern übergeben (und dadurch dort dann zerpflückt) werden kann.
Zu ProcessLine3, dieses set "Wert2=%~9" wie wird hier gezählt, denn der 9. Wert in der Zeile ist es ja nicht.
Doch - mit "Wert2" ist ja "3" gemeint.
Hätte man da nicht auch für den Wert3 ein "Wert3=%~137" setzen können?
Nein - bei %9 ist Schluss; daher werden mit "shift" die Parameter "nach links verschoben": %1 fällt weg, %2 wird %1, %3 wird %2 and so on ...
Wird das oft genug gemacht (dafür die Zählschleife bis 137), ist schließlich Parameter 138 als %1 anzusprechen - nicht sehr elegant, aber, wie's scheint, doch effektiv ...

Grüße
bastla
Bitte warten ..
Mitglied: Mikefield
29.01.2009 um 20:02 Uhr
Hallo bastla,

OK, so habe ich es jetzt verstanden, Danke für die Erklärung!
Das mit dem Wert2 ist OK, Du warst zu schnell mit der Antwort. Habe es oben in meiner Antwort schon gelöscht. Dummerweise hatte ich in der falschen Datei reingeschaut und da stand die 3 woanders. Also mein Fehler.

Besten Dank!
mf

Nachtrag: Gibt es noch die Möglichkeit den Punkt in 16.8 durch ein Komma zu ersetzen?
Exel macht da immer 16. August draus.

mf
Bitte warten ..
Mitglied: bastla
30.01.2009 um 21:07 Uhr
Hallo Mikefield!
Gibt es noch die Möglichkeit den Punkt in 16.8 durch ein Komma zu ersetzen?
Sollte so gehen:
set "Wert3=%Wert3:.=,%"
Grüße
bastla
Bitte warten ..
Mitglied: Mikefield
31.01.2009 um 21:32 Uhr
Hat funktioniert, besten Dank!

Gruß
Mikefield
Bitte warten ..
Mitglied: Mikefield
28.02.2009 um 17:28 Uhr
Hallo Bastla!

Ich habe mal noch eine Frage zu den Zeilen 09 und 13.
In Zeile 09 steht !Zeile! in "", in Zeile 13 nicht. Wenn ich diese auch in "" setze funktioniert die weitere Verarbeitung nicht. So richtig will sich das mir nicht erschließen ...
Hängt das mit der Übergabe zusammen, da in ProcessLine3 keine For Schleife ist?

Herzlichst
mf
Bitte warten ..
Mitglied: bastla
28.02.2009 um 17:37 Uhr
Hallo Mikefield!

Die in Zeile 13 übergebene !Zeile! soll ja nicht als ein einziger Parameter (was die Folge ist, wenn Du sie unter Anführungszeichen setzt), sondern als eine Folge von, durch Leerzeichen getrennten, Parametern an das Unterprogramm übergeben werden.

Grüße
bastla
Bitte warten ..
Mitglied: Mikefield
28.02.2009 um 17:44 Uhr
Hallo Bastla!

Habe es verstanden!

Danke
mf
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Mittels Batch bestimmte Information aus unbekannter Textdatei auslesen und in XML-Datei schreiben

gelöst Frage von tardezyxBatch & Shell3 Kommentare

Hallo, es sind innerhalb eines Verzeichnisses sehr viele Unterordner vorhanden, in denen sich jeweils eine Textdatei befindet, deren Strukturen ...

Batch & Shell

Einen bestimmten Teil einer Textdatei auslesen

gelöst Frage von Focus1610Batch & Shell5 Kommentare

Hallo, ich brauche mal einen Denkanstoß. Ich bekomme per FTP von einem Kunden täglich mehrere Textdateien. Diese haben unterschiudlich ...

Batch & Shell

Bestimmte Zeile aus mehreren Dateien in eine neue Datei schreiben

gelöst Frage von Oggy76Batch & Shell5 Kommentare

Hallo zusammen, meine Kenntnisse in Sachen batch/shell sind ehr auf Anfängerniveau zu sehen. Grund -basics im CMD-Prompt sind vorhanden, ...

Entwicklung

Programmierung - In Textdatei an einer bestimmten Stelle einen bestimmten Wert eintragen

gelöst Frage von JimStarEntwicklung1 Kommentar

Guten Morgen zusammen, habe ein kleines Problem: Ich soll ein Script schreiben, welches durch ausführen eine bestimmte Datei bearbeitet. ...

Neue Wissensbeiträge
Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 14 StundenWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Sicherheit
Microsoft und Skype: Sicherheit
Information von kgborn vor 14 StundenSicherheit

Die Tage gab es ja einige Berichte zur Sicherheit des Skype-Updaters. Der Updater von Skype läuft unter dem Konto ...

Datenschutz

Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10

Information von Penny.Cilin vor 1 TagDatenschutz8 Kommentare

Hallo, passend zum Thema Ablösung LIMUX in München ein Beitrag bei Heise (siehe Link folgend). Behörden ignorieren Sicherheitsbedenken gegenüber ...

Sicherheit
Information Security Hub Munich airport
Information von brammer vor 1 TagSicherheit

Hallo, Neues Center für Cyber Kriminalität am Münchener Flughafen brammer

Heiß diskutierte Inhalte
Exchange Server
Exchange Postfach Einbindung Betriebs-rat -Arzt, Bewerbung .
gelöst Frage von YellowcakeExchange Server23 Kommentare

Hey ich habe da mal eine Denksport Aufgabe bekommen Genutzt wird ein Exchange Server 2010. hier gibt es den ...

Windows Server
Downgrade von Windows Server 2016 auf 2012 - Wie vorgehen?
Frage von EstefaniaWindows Server13 Kommentare

Guten Ich habe eine Frage an Erfahrene unter euch. Durch einen InPlace Upgrade wurde Windows Server 2012 auf die ...

Datenschutz
Telematikinfrastruktur Erfahrungsaustausch
Frage von MOS6581Datenschutz12 Kommentare

Moin, unter meinen Kunden befinden sich auch einige Ärzte, welche sich künftig mit der Telematikinfrastruktur-Geschichte der Gematik herumärgern dürfen. ...

Windows Server
Delgegierte OU via RDP verwalten - Objektverwaltung zuweisen
gelöst Frage von TOAOICEWindows Server12 Kommentare

Hallo, ich habe folgendes Problem. Ich möchte in meiner Domäne (Server2016), einer Gruppe (OUAdmin) Berechtigungen auf die OU Test ...