Versch. Grossbuchstaben aus File auslesen und abspeichern
Moin freunde
ich habe folgendes textfile, dass jeden tag erneuert wird. (altes wird überschrieben)
Inhalt:
EMM1
Volume in Laufwerk O: hat keine Bezeichnung.
Volumeseriennummer: 6006-E9A7
(Leerzeile)
Verzeichnis von o:\programme\ceessar
(Leerzeile)
05.03.2009 11:40 297'607'168 Offline.mdb
1 Datei(en) 297'607'168 Bytes
0 Verzeichnis(se), 72'073'424 Bytes frei
(Leerzeile)
LUZ1
(hier fängt es wieder von vorne an)
Ich frage jeden Tag in den Geschäftern ab (sind 67 Stück), ob die Offlinedb aktuell ist.
Für mich relevant sind folgende Einträge:
EMM1 (ist der Kürzel der Filiale)
05.03.2009 297'607'168 (Datum und die Grösse. Die Zeit wie auch der Name sind nicht wichtig)
Der andere "Müll" brauche ich nicht.
Das neu generierte Textfile sollte nun so aussehen:
EMM1, 05.03.2009, 297607168
LUZ1, in dem Stil weiter bis alle Filialen ausgelesen sind
Somit kann ich diese Daten in ein Excel-Sheet einfügen und sehe immer genau, in welcher Filiale die OfflineDB nicht erstellt worden ist.
Noch wichtig zum wissen:
Sollte eine Filiale nicht erreichabr sein, erscheint nur das Kürzel bsp. EMM1 und direkt unterhalb beginnt der nächste Kürzel bsp. LUZ1
Die Kürzel sind immer Grossbuchstaben mit einer Zahl. Die Zahlen gehen bis max. 4, also EMM1, EMM2, EMM3 etc
Ich wäre froh, wenn mir jmd. helfen könnte
ich habe folgendes textfile, dass jeden tag erneuert wird. (altes wird überschrieben)
Inhalt:
EMM1
Volume in Laufwerk O: hat keine Bezeichnung.
Volumeseriennummer: 6006-E9A7
(Leerzeile)
Verzeichnis von o:\programme\ceessar
(Leerzeile)
05.03.2009 11:40 297'607'168 Offline.mdb
1 Datei(en) 297'607'168 Bytes
0 Verzeichnis(se), 72'073'424 Bytes frei
(Leerzeile)
LUZ1
(hier fängt es wieder von vorne an)
Ich frage jeden Tag in den Geschäftern ab (sind 67 Stück), ob die Offlinedb aktuell ist.
Für mich relevant sind folgende Einträge:
EMM1 (ist der Kürzel der Filiale)
05.03.2009 297'607'168 (Datum und die Grösse. Die Zeit wie auch der Name sind nicht wichtig)
Der andere "Müll" brauche ich nicht.
Das neu generierte Textfile sollte nun so aussehen:
EMM1, 05.03.2009, 297607168
LUZ1, in dem Stil weiter bis alle Filialen ausgelesen sind
Somit kann ich diese Daten in ein Excel-Sheet einfügen und sehe immer genau, in welcher Filiale die OfflineDB nicht erstellt worden ist.
Noch wichtig zum wissen:
Sollte eine Filiale nicht erreichabr sein, erscheint nur das Kürzel bsp. EMM1 und direkt unterhalb beginnt der nächste Kürzel bsp. LUZ1
Die Kürzel sind immer Grossbuchstaben mit einer Zahl. Die Zahlen gehen bis max. 4, also EMM1, EMM2, EMM3 etc
Ich wäre froh, wenn mir jmd. helfen könnte
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 111082
Url: https://administrator.de/contentid/111082
Ausgedruckt am: 23.11.2024 um 00:11 Uhr
14 Kommentare
Neuester Kommentar
Moin,
ich hab leider grad keine Zeit das komplette Script zu schreiben - aber mit Perl sollte das ne kleinigkeit sein... Zuerst die Datei einlesen, in einen grossen Array packen und dann jede Zeile des Arrays prüfen ob diese mit ^[A-Z](3) anfängt:
^ -> Prüft ob eine Zeile damit anfängt
[A-Z] ist das Pattern wonach du suchst (Alle buchstaben zwischen A-Z als grossbuchstaben)
(3) (oder {3}) sagt das das Pattern 3x vorkommen muss.
Wenn ja - dann die gefundene Zeile Zeichen 1-4 ausgeben und nen zweites Regex aufbauen: Beginnt die Zeile mit [0-9][0-9]\.[0-9][0-9]\.[0-9][0-9][0-9][0-9] (\. weil nur ein . ein universeller platzhalter ist!) dann diese auch rausschreiben.
Damit sollte das dann schon laufen - die Ausgabe noch etwas in schön formatieren und du hast gleich ne csv-Datei erstellt
ich hab leider grad keine Zeit das komplette Script zu schreiben - aber mit Perl sollte das ne kleinigkeit sein... Zuerst die Datei einlesen, in einen grossen Array packen und dann jede Zeile des Arrays prüfen ob diese mit ^[A-Z](3) anfängt:
^ -> Prüft ob eine Zeile damit anfängt
[A-Z] ist das Pattern wonach du suchst (Alle buchstaben zwischen A-Z als grossbuchstaben)
(3) (oder {3}) sagt das das Pattern 3x vorkommen muss.
Wenn ja - dann die gefundene Zeile Zeichen 1-4 ausgeben und nen zweites Regex aufbauen: Beginnt die Zeile mit [0-9][0-9]\.[0-9][0-9]\.[0-9][0-9][0-9][0-9] (\. weil nur ein . ein universeller platzhalter ist!) dann diese auch rausschreiben.
Damit sollte das dann schon laufen - die Ausgabe noch etwas in schön formatieren und du hast gleich ne csv-Datei erstellt
Perl ist eine Script-Programmiersprache ... Dafür müsstest du dann den Interpreter installieren - ist freie Software...
Allerdings: Wenn du die Daten praktisch aus einer grossen "Hauptdatenbank" nur in eine lokale Offline-DB packst dann ist die Frage -> kannst du dem Tool was die Daten kopiert nicht einfach am Ende sagen das es dir z.B. eine Mail schicken soll bzw. das es den Status der Kopie in eine entsprechende Tabelle zurückschreibt?
Ich stelle mir das so vor: Du hast ein Script was mit
select .... die ganzen daten aus der quell-DB holt und dann mit "insert" in deine offline-kopie einträgt. Ganz am Ende deines Scriptes machst du dann auf die Quell-DB ein
insert "<standortname>",<datum> into kopiestatus
schon hättest du in deiner Datenbank automatisch die nötigen Einträge - und kannst genau sehen wann deine Offline-Kopie das letzte mal lief...
Allerdings: Wenn du die Daten praktisch aus einer grossen "Hauptdatenbank" nur in eine lokale Offline-DB packst dann ist die Frage -> kannst du dem Tool was die Daten kopiert nicht einfach am Ende sagen das es dir z.B. eine Mail schicken soll bzw. das es den Status der Kopie in eine entsprechende Tabelle zurückschreibt?
Ich stelle mir das so vor: Du hast ein Script was mit
select .... die ganzen daten aus der quell-DB holt und dann mit "insert" in deine offline-kopie einträgt. Ganz am Ende deines Scriptes machst du dann auf die Quell-DB ein
insert "<standortname>",<datum> into kopiestatus
schon hättest du in deiner Datenbank automatisch die nötigen Einträge - und kannst genau sehen wann deine Offline-Kopie das letzte mal lief...
Versuch es mal damit (ungetestet):
@echo off
set "outline="
set "linenr=0"
set "infile=C:\alles.txt"
set "outfile=C:\gefiltert.csv"
echo Filial Kürzel, Datum, Grösse>"%outfile%"
FOR /F "tokens=1,* delims=:" %%i in ('findstr /n .* "%infile%"') do call:verarbeite "%%i" "%%j"
goto:eof
:verarbeite
set /a linenr+=1
set "line=%~2"
if "%linenr%" equ "1" set "outline=%line%"
if "%linenr%" equ "2" if "%line:~0,18%" equ "Volume in Laufwerk" (echo %outline% **>>%outfile% & set "linenr=0")
if "%linenr%" equ "7" FOR /F "tokens=1,3 delims= " %%l in ('echo %line%') do echo %outline%, %%l, %%m >>%outfile%
if "%linenr%" equ "10" set "linenr=0"
goto:eof
Habs jetzt angetestet udn so gehts:
@echo off
set "outline="
set "linenr=0"
set "infile=alles.txt"
set "outfile=gefiltert.csv"
echo Filial Kürzel, Datum, Grösse>"%outfile%"
FOR /F "tokens=1,* delims=:" %%i in ('findstr /n .* "%infile%"') do set "line=%%j" & call:verarbeite "%%i" "%%j"
goto:eof
:verarbeite
set /a linenr+=1
if "%linenr%" equ "10" set "linenr=0"
if "%line%" equ "" goto:eof
set "line=%line:)=%"
set "line=%line:(=%"
if "%linenr%" equ "1" set "outline=%line%"
if "%linenr%" equ "2" if "%line:~0,18%" neq "Volume in Laufwerk" (
echo %outline% **>>"%outfile%"
set "linenr=0"
)
set "line=%line:'= %"
if "%linenr%" equ "7" FOR /F "tokens=1,3,4,5 delims= " %%l in ('echo %line%') do echo %outline%, %%l, %%m^'%%n^'%%o >>"%outfile%"
goto:eof
Moin delphin66 ,
Willkommen im Forum.
Und natürlich Moin miniversum.
hier wäre ein Alternativschnipsel:
Den Pfad zu Deinem "%InFile%" und "%outfile% bitte anpassen.
Grüße
Biber
[Edit] Korrektur %1 (Datum) in :processline ergänzt. (s.u. ) [/Edit]
Willkommen im Forum.
Und natürlich Moin miniversum.
hier wäre ein Alternativschnipsel:
::-------DailyBranches.cmd
@echo off & setlocal
:: variable für "Letzte gelesene Filiale"
Set "LastReadBranch="
Set "inFile=D:\Filialen\DailyImport.txt"
Set "OutFile=con:"
FOR /f "Tokens=1,3" %%i in ('findstr /v "^$ ( Volume Verzeichnis" %inFile%') do (
Call :processLine %%i %%j
)
goto :eof
:processLine entweder nur %1=Filiale oder %1 %2 Datum Größe
If "%~2"=="" (
If NOT "%LastReadBranch%" == "" Echo %LastReadBranch% --keine Daten-- >>%OutFile%
Set "LastReadBranch=%1"
Goto :eof
)
::--- else-Fall ... Parameter %2 (FileSize) ist dabei
Set "theSize=%2"
Set "TheSize=%theSize:'=%"
>>%outFile% Echo %LastReadBranch% %1 %TheSize%
Set "LastReadbranch="
goto :eof
Den Pfad zu Deinem "%InFile%" und "%outfile% bitte anpassen.
Grüße
Biber
[Edit] Korrektur %1 (Datum) in :processline ergänzt. (s.u. ) [/Edit]