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 Batch - Datei mit fixer Satzlänge erzeugen

Mitglied: jojebo

jojebo (Level 1) - Jetzt verbinden

15.05.2011 um 18:07 Uhr, 3059 Aufrufe, 6 Kommentare

Hi zusammen,

ich möchte aus einer CSV-Datei Informationen auslesen und die einzelnen Felder in eine neue Datei mit fixer Satzlänge schreiben. Das Auslesen der CSV habe ich hinbekommen, jetzt weiß ich nicht wie ich die unterschiedlich langen Felinhalte in eine Datei mit fixer Satzlänge ausgeben kann. Folgend meine Ausleseroutine:
01.
@echo on 
02.
 
03.
set inDir=D:\input 
04.
set indexMsk=index_*.txt 
05.
set "Delim=,"  
06.
 
07.
for %%F in ("%inDir%\%indexMsk%") do ( 
08.
set INDEXliste=%%F  
09.
echo Indexliste gefunden: %%~nxF >>D:\log.txt 
10.
11.
 
12.
for /f "tokens=1-9 delims=%Delim%" %%a in (%INDEXliste%) do (  
13.
 
14.
    set "anrede=%%a" 
15.
    set "nachname=%%b" 
16.
    set "vorname=%%c" 
17.
    set "strasse=%%d" 
18.
    set "hausnr=%%e" 
19.
    set "PLZ=%%f" 
20.
    set "Ort=%%g" 
21.
    set "LKZ=%%h" 
22.
    set "filename=%%i" 		 
23.
REM muss ersetzt werden durch das Schreiben an bestimmte Position 
24.
    echo %anrede%_%nachname%_%vorname%_%strasse%_%hausnr%_%PLZ%_%Ort%_%filename% >>D:\log.txt 
25.
)  
26.
 
Der Satzaufbau soll z.B. so aussehen:
anrede ab Position 1
nachname ab Position 30
vorname ab Position 60
strasse ab Position 90
usw.

Zu Berücksichtigen ist natürlich, dass zu lange CSV-Feldinhalte gekürzt werden müssen. Es ist dabei ausreichend immer auf Stellen 1-30 zu begrenzen.

Habt ihr mir hierfür einen Lösungsvorschlag?

Vielen Dank und viele Grüße

jojebo
Mitglied: bastla
15.05.2011 um 18:26 Uhr
Hallo jojebo und willkommen im Forum!

Grundsätzliches vorweg: Damit das so funktioniert, wie Du es oben skiziert hast, brauchst Du entweder "setlocal enabledelayedexpansion" und bei der Ausgabe die Schreibweise "!anrede!" anstelle von "%anrede%" oder ein Unterprogramm ...

... ansonsten ist es eigentlich nur noch eine Frage, ob die Felder rechts- oder linksbündig benötigt werden - am Beispiel von Anrede mit 29 (30 - 1) Stellen und linksbündiger Ausrichtung:
01.
set "Leer30=                              " 
02.
... 
03.
set "anrede=%%a%Leer30%" 
04.
... 
05.
echo !anrede:~0,29%!!nachname:~0,30!...
Für ein rechtsbündiges Feld (sehe ich allerdings derzeit nicht) mit 12 Stellen sähe das so aus:
01.
set "Wert=%Leer30%%%n" 
02.
.... 
03.
echo !Wert:~-12!
Näheres dazu mit "set /?" ...

Grüße
bastla
Bitte warten ..
Mitglied: jojebo
17.05.2011 um 11:38 Uhr
Hi bastla,

vielen Dank für die schnelle Antwort hat super funktioniert!

Grüße

jojebo
Bitte warten ..
Mitglied: LordStickstoff
01.07.2011 um 13:41 Uhr
Hallo Bastla,

ich habe ähnliche Herausforderung, jedoch finde und finde ich den Fehler nicht (bei jojebo scheint es ja zu klappen):

Mein Script:

@echo on

set inDir=C:\Hoch\Data\Entwicklung\fest_satzbeschreibung\input
set indexMsk=west_batch_v1_test.txt
set "Delim=;"

for %%F in ("%inDir%\%indexMsk%") do (
set INDEXliste=%%F
echo Indexliste gefunden: %%~nxF >>C:\Hoch\Data\Entwicklung\fest_satzbeschreibung\output\log_feste_satzbeschreibung.txt
)

for /f "tokens=1-2 delims=%Delim%" %%a in (%INDEXliste%) do (

REM Fürs Forum: die _ und ... stellen die leerzeichen dar...ging hier nicht anders / wusste nicht wie

set "Leer44="_______..."
set "Leer76="_______________... "
set "Leer108="_____________________... "


set "E008=%%a%Leer44%"
set "E009=%%b%Leer76%"

REM muss ersetzt werden durch das Schreiben an bestimmte Position
echo !E008:~44,75%!!E009:~76,107%! >>C:\Hoch\Data\Entwicklung\fest_satzbeschreibung\output\log_feste_satzbeschreibung.txt
)


Die ersten Zeilen der Datei "west_batch_v1_test.txt":

E008;E009
3M Co.;*
AB Industrie;*
AB Köhler;*
AB Volvo;*
ABB Ltd.;*
Carrier Most;*


Meine Outputdatei:

Indexliste gefunden: west_batch_v1_test.txt


Mehr nicht...leider


Ich habe die Variablen schon mit nem Echo überprüft...die stimmen.


Bitte H I L F E ! ! !


Herzlichsten Dank im Voraus!
Bitte warten ..
Mitglied: bastla
01.07.2011 um 14:21 Uhr
Hallo LordStickstoff und willkommen im Forum!

Zunächst zu:
die _ und ... stellen die leerzeichen dar...ging hier nicht anders / wusste nicht wie
Verwende bitte sowohl für Code als auch Textbeispiele die passende Formatierung ...
Ansonsten war der erste Satz meines obigen Kommentars so gemeint, dass Du mit
@echo on & setlocal enabledelayedexpansion
beginnen solltest ...
Noch als Anmerkung: Sinnvoll wäre es, nicht nur %inDir% und %indexMsk%, sondern auch %outDir% und zB %LogFile% zu verwenden ...
Schließlich: Deine erste "for"-Schleife wäre nur dann passend, wenn in %indexMsk% Wildcards vorhanden wären (ansonsten würde ein "if exist" ausreichen) - dann aber müsste die eigentliche Verarbeitung ebenfalls in diese Schleife aufgenommen oder als Unterprogramm aufgerufen werden.

[Edit] Da ich inzwischen etwas mehr Zeit hatte, mir das anzusehen:
01.
@echo off & setlocal enabledelayedexpansion 
02.
 
03.
set "inDir=C:\Hoch\Data\Entwicklung\fest_satzbeschreibung\input" 
04.
set "outDir=C:\Hoch\Data\Entwicklung\fest_satzbeschreibung\output" 
05.
set "indexMsk=west_batch_v1_test.txt" 
06.
set "Log=log_feste_satzbeschreibung.txt" 
07.
set "Delim=;" 
08.
 
09.
set "Leer44=                                            " 
10.
set "Leer76=                                                                            " 
11.
set "Leer108=                                                                                                            " 
12.
 
13.
del "%outDir%\%Log%" 2>nul 
14.
for %%F in ("%inDir%\%indexMsk%") do ( 
15.
    set "INDEXliste=%%~F" 
16.
    echo Indexliste gefunden: %%~nxF 
17.
     
18.
    for /f "usebackq tokens=1-2 delims=%Delim%" %%a in ("!INDEXliste!") do ( 
19.
        set "E008=%%a%Leer44%" 
20.
        set "E009=%%b%Leer76%" 
21.
        echo !E008:~0,44!!E009:~0,76! 
22.
23.
)>>"%outDir%\%Log%"
Hinsichtlich der Ausgabe in Zeile 21 musst Du ggf noch nachbessern ...
[/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: LordStickstoff
04.07.2011 um 07:21 Uhr
Hallo Bastla,

vielen Dank für Deine Unterstützung...das Script läuft schon ein wenig besser, aber...

Anscheinend geht er alle Datensätze durch (s.n. Ausschnitt), aber er füllt mir dies nicht mit dem Inhalt aus der Input-Datei.

Indexliste gefunden: west_batch_v2_test.txt  
E008:~44,75~76,107 
E008:~44,75~76,107 
E008:~44,75~76,107 
E008:~44,75~76,107 
E008:~44,75~76,107
Auch sind die Einträge nicht an 44 bzw. 76. Stelle sondern exakt so wie oben der Ausschnitt.


Hast du noch eine Idee Bastla?


Dank dir vielmals im Voraus!
Bitte warten ..
Mitglied: bastla
04.07.2011 um 08:36 Uhr
Hallo LordStickstoff!

Bei mir sieht der Testlauf (in der CMD-Shell mit dem oben geposteten Batch - als "MakeCSV.cmd" gespeichert - und Ausgabe der Inhalte der beiden Dateien) so aus:
D:\>type C:\Hoch\Data\Entwicklung\fest_satzbeschreibung\input\west_batch_v1_test 
.txt 
E008;E009 
3M Co.;* 
AB Industrie;* 
AB K÷hler;* 
AB Volvo;* 
ABB Ltd.;* 
Carrier Most;* 
D:\>MakeCSV.cmd 
 
D:\>type C:\Hoch\Data\Entwicklung\fest_satzbeschreibung\output\log_feste_satzbes 
chreibung.txt 
Indexliste gefunden: west_batch_v1_test.txt 
E008                                        E009 
 
3M Co.                                      * 
 
AB Industrie                                * 
 
AB K÷hler                                   * 
 
AB Volvo                                    * 
 
ABB Ltd.                                    * 
 
Carrier Most                                * 
 
 
D:\>
Die Spalte für E008 ist 44 Zeichen breit, für E009 werden 76 Zeichen ausgegeben.

Beachte dabei bitte die Schreibweise in der Zeile 21 des Batches - mit "E008:~44,75" (wie es Deine Darstellung oben enthält) würdest Du die Anweisung geben, die ersten 44 Zeichen des Inhaltes von %E008% zu überspringen und dann die nächsten 75 Zeichen auszugeben ...

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Batch - Datei Kopieren und neue Datei erzeugen

gelöst Frage von MasterSchlumpfBatch & Shell6 Kommentare

Hallo Gemeinde, bitte entschuldigt, dass meine Batch-Kenntnisse begrenzt sind. Ich möchte eine Datei zum Sichern auf ein Netzlaufwerk kopieren. ...

Batch & Shell

Batch Variable erzeugen mit Leerzeichen und Klammern

gelöst Frage von hipfzwirgelBatch & Shell11 Kommentare

Hallo an Alle, ich habe eine lösbare Aufgabe und finde die richtige Schreibweise nicht. Ich muss eine Variable in ...

Batch & Shell

PDF Datei erzeugen über Kommandozeile

gelöst Frage von Xaero1982Batch & Shell6 Kommentare

Moin Zusammen, ich erstelle mithilfe einer kleinen PHP Datei eine HTML Datei. Diese soll anschließend in eine PDF Datei ...

Batch & Shell

1GB Daten mit kleinen Dateien erzeugen

Frage von 103148Batch & Shell11 Kommentare

Hallo, ich bräuchte eine Batch, mit der ich 1GB Daten mit kleinen Dateien erzeugen kann. Also 1.txt bis 213213213.txt ...

Neue Wissensbeiträge
Humor (lol)
IoT-Gefahr: Smartes Aquarium leckt!
Information von Lochkartenstanzer vor 4 StundenHumor (lol)3 Kommentare

Moin, Die IoT-Manie hat weitere Opfer gefunden. Ein Casino-Leck durch ein smartes Aquarium: Allerdings haben sie kein Wasser, sondern ...

Router & Routing

Olle Fritzbox 7270 mit VPN und SIP-Telefonie hinter O2 Homebox 6641 als "Modem"

Erfahrungsbericht von the-buccaneer vor 12 StundenRouter & Routing3 Kommentare

Nun war es soweit: Auch O2 hat mich mit VOIP zwangsbeglückt. Heute am Privatanschluss, in 2 Wochen ist das ...

Sicherheit

Ungepatchte Remote Code Execution-Lücke in LG NAS

Information von kgborn vor 1 TagSicherheit

Nutzt wer LG NAS-Einheiten? In den NAS-Einheiten der LG Network Storage-Einheiten gibt es eine sehr unschöne Schwachstelle, die einen ...

Windows Update

Neue Version KB4099950 NIC Einstellungen gehen verloren

Information von sabines vor 1 TagWindows Update2 Kommentare

Es ist eine neue Version des KB4099950 verfügbar, die das Problem mit den verlorenen Netzwerkeinstellungen lösen soll. Das Datum ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
OpenVPN Client Fehlermeldungen
Frage von chris84LAN, WAN, Wireless14 Kommentare

Hallo Zusammen, wir nutzen seit kurzem einen neuen Router und den OpenVPN Client. Die VPN Verbindung klappt; allerdings kommen ...

Sicherheit
Verbindliche Zustellung per E-Mail?
Frage von ahussainSicherheit14 Kommentare

Hallo allerseits, ein Kunde von mir nutzt intensiv Fax. Hauptgrund: zusammen mit einer Empfangsbestätigung ist eine verbindliche Zustellung gewährleistet. ...

Sonstige Systeme
Wie Normenkataloge im Unternehmen bereit stellen?
Frage von MuzzepuckelSonstige Systeme14 Kommentare

Hallo Kollegen, ich lese schon lange hier mit, nun mein ersrer Beitrag, bzw. Frage. :-) Wir benötigen für unsere ...

Netzwerke
Gateway in Switches, Druckern ect eintragen oder nicht
Frage von JodelknutNetzwerke12 Kommentare

Hi, bisher habe ich immer das Gateway überall wo es verlangt oder eintragbar war auch eingetragen. Mein neuer Kollege ...