Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Versch. Grossbuchstaben aus File auslesen und abspeichern

Frage Entwicklung Batch & Shell

Mitglied: delphin66

delphin66 (Level 1) - Jetzt verbinden

11.03.2009, aktualisiert 10:29 Uhr, 3677 Aufrufe, 14 Kommentare

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
Mitglied: maretz
11.03.2009 um 10:40 Uhr
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
Bitte warten ..
Mitglied: delphin66
11.03.2009 um 11:20 Uhr
Hi maretz
danke dir mal für deine schnelle antwort.

ich hatte gedacht, ich könnte das teil in einem batch starten, also relativ simple. Nun kommst du mit Perl!?!? Damit kann ich leider überhaupt nichts anfangen.
Brauche ich dazu etwas installieren?
Sry, dumme Frage aber ich versteh da nur Bahnhof.

nachtrag:

ich habe einen batch geschrieben offlinebd.cmd

ich mache zuerst ein net use in die filialen und
frage nachher mit
dir o:\programme\ceessar\offline.mdb >> offlinebd.txt

die daten ab.
Bitte warten ..
Mitglied: maretz
11.03.2009 um 11:41 Uhr
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...
Bitte warten ..
Mitglied: delphin66
11.03.2009 um 12:03 Uhr
Hi maretz

ups, da haben wir uns falsch verstanden.

ich sitze im "hauptquartier" und betreue über 60 filialen. in den filialen gibt es kassen (registriekassen, 1, 2 oder bis zu 4 stück). dort läuft ein sql-server, der immer um mitternacht von der sql-datenbank eine access datenbank erzeugt und in einem folder ablegt. sollte der sql-server abrauchen, so wird automatisch auf die offlinedb ( ms access) geschaltet und der betrieb kann weiter laufen.
jetzt habe ich die aufgabe, die offlinedb auf grösse und aktualität zu kontrollieren. die grösse ist auch entscheident, weil die könnte ja während dem kopiervorgang abgebrochen sein.
in einem späteren arbeitsschritt möchte ich dann dieses file in ein excel - sheet importieren das dan folgendermassen aussieht:

Filial Kürzel, Datum, Grösse
EMM1, 05.03.2009, 278876234
EMM2, 05.03.2009, 280234762 (die grösse der DB kann ja wenig varieren)
EMM3 ** (Wenn kein datum steht, weiss ich sofort, dass die Verbindung in diese Filiale nicht funktioniert hatte oder die Kasse nicht läuft)
EMM4, 05.03.2009, 290234652
LUZ1 (so weiter bis alle 60 filialen abgearbeitet worden sind)
Bitte warten ..
Mitglied: miniversum
11.03.2009 um 13:06 Uhr
Versuch es mal damit (ungetestet):
01.
@echo off 
02.
set "outline=" 
03.
set "linenr=0" 
04.
set "infile=C:\alles.txt" 
05.
set "outfile=C:\gefiltert.csv" 
06.
 
07.
echo Filial Kürzel, Datum, Grösse>"%outfile%" 
08.
FOR /F "tokens=1,* delims=:" %%i in ('findstr /n .* "%infile%"') do call:verarbeite "%%i" "%%j" 
09.
goto:eof 
10.
 
11.
:verarbeite 
12.
set /a linenr+=1 
13.
set "line=%~2" 
14.
 
15.
if "%linenr%" equ "1" set "outline=%line%" 
16.
if "%linenr%" equ "2" if "%line:~0,18%" equ "Volume in Laufwerk" (echo %outline% **>>%outfile% & set "linenr=0") 
17.
if "%linenr%" equ "7" FOR /F "tokens=1,3 delims= " %%l in ('echo %line%') do echo %outline%, %%l, %%m >>%outfile% 
18.
if "%linenr%" equ "10" set "linenr=0" 
19.
goto:eof
Bitte warten ..
Mitglied: delphin66
11.03.2009 um 13:34 Uhr
Hi miniversum

danke für deine antwort.
ich habe infile und outfile meinem pfad angepasst.

ich erhalte zwar eine csv, darin steht aber nur
Filial Kürzel, Datum, Grösse

ich habe keine Einträge
EMM1 05.03.2009 etc...
Bitte warten ..
Mitglied: miniversum
11.03.2009 um 18:51 Uhr
Habs jetzt angetestet udn so gehts:
01.
@echo off 
02.
set "outline=" 
03.
set "linenr=0" 
04.
set "infile=alles.txt" 
05.
set "outfile=gefiltert.csv" 
06.
 
07.
echo Filial Kürzel, Datum, Grösse>"%outfile%" 
08.
FOR /F "tokens=1,* delims=:" %%i in ('findstr /n .* "%infile%"') do set "line=%%j" & call:verarbeite "%%i" "%%j" 
09.
goto:eof 
10.
 
11.
:verarbeite 
12.
set /a linenr+=1 
13.
if "%linenr%" equ "10" set "linenr=0" 
14.
if "%line%" equ "" goto:eof 
15.
set "line=%line:)=%" 
16.
set "line=%line:(=%" 
17.
 
18.
if "%linenr%" equ "1" set "outline=%line%" 
19.
if "%linenr%" equ "2" if "%line:~0,18%" neq "Volume in Laufwerk" ( 
20.
  echo %outline% **>>"%outfile%" 
21.
  set "linenr=0" 
22.
23.
set "line=%line:'= %" 
24.
if "%linenr%" equ "7" FOR /F "tokens=1,3,4,5 delims= " %%l in ('echo %line%') do echo %outline%, %%l, %%m^'%%n^'%%o >>"%outfile%" 
25.
goto:eof
Bitte warten ..
Mitglied: delphin66
11.03.2009 um 20:05 Uhr
hi miniversum

ich danke dir für das "neue" script. ich werde dies als erstes nach dem morgendlichen Kaffee testen
und dir berichten.

nice evening and thx
Bitte warten ..
Mitglied: delphin66
12.03.2009 um 09:07 Uhr
Guten Morgen

habe es soeben getestet, es stimmt nicht ganz:

hier mein input file
--------snipp

EMM1
Volume in Laufwerk O: hat keine Bezeichnung.
Volumeseriennummer: 6006-E9A7

Verzeichnis von o:\programme\ceessar

11.03.2009 11:48 298'262'528 Offline.mdb
1 Datei(en) 298'262'528 Bytes
0 Verzeichnis(se), 72'050'561'024 Bytes frei
EMM2
Volume in Laufwerk O: hat keine Bezeichnung.
Volumeseriennummer: 6006-E9A7

Verzeichnis von o:\programme\ceessar

11.03.2009 00:12 298'262'528 Offline.mdb
1 Datei(en) 298'262'528 Bytes
0 Verzeichnis(se), 73'166'266'368 Bytes frei
LUZ1
Volume in Laufwerk O: hat keine Bezeichnung.
Volumeseriennummer: 6006-E9A7

Verzeichnis von o:\programme\ceessar

11.03.2009 11:45 298'262'528 Offline.mdb
1 Datei(en) 298'262'528 Bytes
0 Verzeichnis(se), 72'066'781'184 Bytes frei


------snapp
und so geht es weiter bis alle filialen durch sind (es sind 60 filialen mit 2 oder mehreren kassen)

und so sollte das outpufile aussehen (in Tabellen im Excel)

------------snipp

Filiale-Kürzel Datum Grösse
EMM1 11.03.2009 298'262'528
EMM2 11.03.2009 298'262'528
LUZ1 11.03.2009 298'262'528

----------snapp


es kann sein, dass eine filiale nicht antwortet (ADSL-Leitung down, oder die Kasse wurde abgestellt) dann sieht das ganze so aus:

-----------------snipp

EMM1
Volume in Laufwerk O: hat keine Bezeichnung.
Volumeseriennummer: 6006-E9A7

Verzeichnis von o:\programme\ceessar

11.03.2009 11:48 298'262'528 Offline.mdb
1 Datei(en) 298'262'528 Bytes
0 Verzeichnis(se), 72'050'561'024 Bytes frei
EMM2
LUZ1
Volume in Laufwerk O: hat keine Bezeichnung.
Volumeseriennummer: 6006-E9A7

Verzeichnis von o:\programme\ceessar

11.03.2009 11:45 298'262'528 Offline.mdb
1 Datei(en) 298'262'528 Bytes
0 Verzeichnis(se), 72'066'781'184 Bytes frei
------------------snapp

wie du siehst , bekam ich von EMM2 keine info (also kasse abgestellt oder leitung down)
in diesem fall sollte im outpufile nur der eintrag
EMM2
stehen, also ohne datum und grösse. so kann ich auf die schnelle sehen, das da etwas schiefgelaufen ist.


danke dir (euch) für antworten
Bitte warten ..
Mitglied: Biber
12.03.2009 um 10:16 Uhr
Moin delphin66 ,

Willkommen im Forum.
Und natürlich Moin miniversum.

hier wäre ein Alternativschnipsel:

01.
::-------DailyBranches.cmd 
02.
@echo off & setlocal 
03.
:: variable für "Letzte gelesene Filiale"  
04.
Set "LastReadBranch=" 
05.
Set "inFile=D:\Filialen\DailyImport.txt" 
06.
Set "OutFile=con:" 
07.
FOR /f "Tokens=1,3" %%i in ('findstr /v "^$ ( Volume Verzeichnis" %inFile%') do ( 
08.
    Call :processLine %%i %%j 
09.
10.
goto :eof 
11.
 
12.
:processLine entweder nur %1=Filiale oder %1 %2 Datum Größe 
13.
If "%~2"=="" ( 
14.
    If NOT "%LastReadBranch%" == "" Echo %LastReadBranch% --keine Daten-- >>%OutFile% 
15.
    Set "LastReadBranch=%1" 
16.
    Goto :eof 
17.
18.
::--- else-Fall ... Parameter %2 (FileSize) ist dabei 
19.
  Set "theSize=%2" 
20.
  Set "TheSize=%theSize:'=%" 
21.
  >>%outFile% Echo %LastReadBranch% %1 %TheSize% 
22.
  Set "LastReadbranch=" 
23.
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]
Bitte warten ..
Mitglied: delphin66
12.03.2009 um 10:35 Uhr
Hallo Biber

::-------DailyBranches.cmd
@echo off & setlocal
:: variable für "Letzte gelesene Filliale" und "neue Filial-Sequenz"
Set "LastReadBranch="
Set "inFile=H:\support\offlinedb\pos_exe.txt"
Set "OutFile=H:\support\offlindb\posneu.txt"
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


Habe das in - und output file angepasst, den batch laufen lassen, und es kam folgende fe^hlermeldung:
das System kann den angegebenen Pfad nicht finden

Bitte warten ..
Mitglied: delphin66
12.03.2009 um 10:38 Uhr
Sry Biber, war etwas zu voreilig

script funktioniert, jedoch wäre ich froh, wenn ich das datum noch drinnen hätte

danke dir
Bitte warten ..
Mitglied: Biber
12.03.2009 um 10:55 Uhr
Moin delphin66,

sorry, hatte den Parameter 1 in diesem Statement unterschlagen.
Echo %LastReadBranch% %1 %TheSize%

Ist oben angepasst.

Grüße
Biber
Bitte warten ..
Mitglied: delphin66
12.03.2009 um 11:31 Uhr
Biber und miniversum

Jungs, ihr seit SPITZE

Betsen Dank und grüsse
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst BATCH Element aus XML-File auslesen (9)

Frage von pappkamerad zum Thema Batch & Shell ...

Windows Server
gelöst AD-User einer AD-Gruppe auslesen und in ein File schreiben (15)

Frage von Estefania zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (12)

Frage von Motte990 zum Thema Microsoft Office ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...