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, 3049 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
Vmware
VMware Update für den ESXi 5.5 verfügbar
Information von sabines vor 6 StundenVmware

Nach dem ganzen Hickhack um Update mit Microcode Anpassungen und Rückzug, gibt es nun für den ESXi 5.5 ein ...

CPU, RAM, Mainboards

Meltdown und Spectre: Intel zieht Microcode-Updates für Prozessoren zurück

Information von keine-ahnung vor 10 StundenCPU, RAM, Mainboards5 Kommentare

Moin, extrem lutztig. Nur gut, dass ich noch nicht beim Probanden-Bingo mitgemacht habe :-) LG, Thomas

Router & Routing
PfSense als Addon auf QNAP
Information von magicteddy vor 1 TagRouter & Routing7 Kommentare

Moin, für Spielereien eine ganz nette Idee aber ich fürchte das soetwas auch als echte Firewall genutzt wird: In ...

Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 1 TagDatenschutz1 Kommentar

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement26 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Server
TEMP-Profile
gelöst Frage von Forseti2003Windows Server21 Kommentare

Guten Morgen, wer kennt sie nicht, die lieben Temporären Benutzerprofile, vorallem immer dann, wenn man sie am wenigsten braucht. ...

Multimedia & Zubehör
Welches Tablet für die Verkäufer?
Frage von Hendrik2586Multimedia & Zubehör15 Kommentare

Guten Morgen meine Lieben, vielleicht könnt ihr mir ja helfen. Es geht um unsere Außendienstmitarbeiter /Verkäufer. Sie sollen demnächst ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk13 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...