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 Batchdatei: Leerzeichen in File schreiben/Zeilenumbruch verhindern

Mitglied: BatzJunior

BatzJunior (Level 1) - Jetzt verbinden

15.12.2006, aktualisiert 20.12.2006, 13766 Aufrufe, 11 Kommentare

Hallo @ alle,

ich habe die "tolle" Aufgabe, ein XML-File in ein ASCII-File mit festen Feldlängen zu überführen. Ein wenig bin ich schon vorangekommen, hänge jetzt allerdings an einer Sache:

Da die Felder vorgeschriebene Feldlängen haben, muss der Platz, den der entsprechende Wert nicht einnimmt mit Leerzeichen aufgefüllt werden. Ich dachte, ich könnte das so lösen:


::errorlänge=Länge der Zeichenkette
::laenge=Feldlänge

...

:write
set /a errorlevel+=1
::---hinter dem zweiten %zeichenfolge% ist noch ein Leerzeichen-----
set %zeichenfolge%=%zeichenfolge%
if not %errorlevel%==%laenge% goto :write
echo %zeichenfolge%>>daten.txt

Leider wird aber kein Leerzeichen hinzugefügt... Hat jmd. eine Idee, wie man das erreichen kann?

Anderes Problem: Nach jedem umgeleiteten Echo in eine Datei wird ein Zeilenumbruch eingefügt. Die Daten sollen jedoch hintereinander auf einer Zeile stehen. Gibt es eine Möglichkeit, den Zeilenumbruch zu verhindern?

Vielen Dank und viele vorweihnachtliche Grüße

Daniel
Mitglied: AxelHahn
15.12.2006 um 15:14 Uhr
Hi Daniel

Füge das Sonderzeichen ^ und ein Leerzeichen ein. Beim SET nimm bei der zu setzenden Variable die % Zeichen weg:

set zeichenfolge=^ %zeichenfolge%

... dann geht es.

Viele Grüsse
-= Axel =-
Bitte warten ..
Mitglied: BatzJunior
15.12.2006 um 15:29 Uhr
Hi Axel,

vielen Dank, dass hat super geklappt! Weißt Du zufällig auch noch eine Lösung für das Zeilenumbruch-Problem?

Liebe Grüße!

Daniel
Bitte warten ..
Mitglied: AxelHahn
15.12.2006 um 15:43 Uhr
Hi Daniel,

bei jedem

echo [irgendwas] >>%ausgabefile%

wird eine einzelne Zeile geschreiben. Ich wüsste lediglich die Variante, dass du die Zeile in einer Variable zusammenbaust und am Ende die Sammelvariable mit echo schreibst, also so etwa:

set ausgabefile=%temp%\testfile.txt
set line=
set line=%line% Hallo
set line=%line% Welt
echo %line% >>%ausgabefile%

Viele Grüsse
-= Axel =-
Bitte warten ..
Mitglied: Biber
16.12.2006 um 00:11 Uhr
Moin BatzJunior und AxelHahn,

auch wenn ja schon eine Lösung gefunden ist, noch zwei Anmerkungen von mir.

a) das (bewusste) Anfügen von leading oder trailing blanks wie auch das Vermeiden von versehentlichen Leerzeichen habe ich mir wie folgt angewöhnt:
01.
>set "text1=bla" & set "text2=blubb   "  & set "text3=        nochwas" 
02.
>echo text1[%text1%] text2[%text2%] text3[%text3%] 
03.
text1[bla] text2[blubb   ] text3[        nochwas]
b) Dementprechend würde ich auch das Auffüllen auf eine bestimmte Festlänge anders machen.

01.
@echo off & setlocal enableDelayedExpansion 
02.
Set "40spaces=                                        " 
03.
 
04.
....(XMLDatei durchflöhen, Tags zuordnen... 
05.
... 
06.
If /i [%TagName%]==[KUNDENNAME] call :writeFeld "%TagValue%" 20 
07.
If /i [%TagName%]==[KUNDENR]        call :writeFeld "%TagValue%" 12 Left 
08.
.... 
09.
goto :eof 
10.
 
11.
:writeFeld Parameter1 %einwert% Parameter2=SollLänge opt.Parameter3=Links auffüllen 
12.
if [%3]==[] ( 
13.
   REM nicht links auffüllen -- also [%einwert% + SPACES]  
14.
   Set "thisvalue=~%1%40spaces%" 
15.
) Else ( 
16.
   Set "thisvalue=%40spaces%%~1" 
17.
   REM links auffüllen -- also [SPACES + %einwert%]  
18.
19.
if [%3]==[] ( 
20.
   REM nicht links auffüllen -- also  n Zeichen von links gezählt 
21.
   set thisvalue=!thisvalue:~0, %2! 
22.
) Else ( 
23.
     REM links auffüllen -- also  n Zeichen von rechts gesehen 
24.
    set thisvalue=!thisvalue:~-%2! 
25.
26.
REM .... lieber nicht: echo %thisvalue%>>daten.txt   
27.
REM ..ich würde es auch "sammeln", wie AxelHahn gepostet hat 
28.
Set "GanzerDatensatz=%GanzerDatensatz%%thisvalue%" 
29.
goto :eof
Gruß
Biber
Bitte warten ..
Mitglied: BatzJunior
18.12.2006 um 10:08 Uhr
Hey Biber,

vielen Dank für Deine Antwort, die mich schon ein ganzes Stückchen weitergebracht hat! Auch möchte ich mich für Deine Tutorials, aus denen ich so einiges mitnehmen konnte, bedanken!
Ein Problem habe ich jetzt noch: Und zwar beihalten die Tagwerte zum Teil Anführungszeichen. Wie kann ich es anstellen, diese da herauszubekommen bzw. zu maskieren?

set wert2=%wert2:"=^"%

funktioniert da nicht und bei einigen Überprüfungen streikt die Konsole, wenn an einer bestimmten Stelle gerade ein Anführungszeichen vorkommt...

Liebe Grüße; Daniel
Bitte warten ..
Mitglied: miniversum
18.12.2006 um 11:15 Uhr
versuchs so:

set wert2=%~wert2%

oder alternativ:

set wert2=%wert2:~1,-1%

miniversum
Bitte warten ..
Mitglied: BatzJunior
18.12.2006 um 13:47 Uhr
Vielen Dank!
Bitte warten ..
Mitglied: Biber
18.12.2006 um 14:38 Uhr
Moin BatzJunior,

teilen wir uns die Restarbeit?
Du setzt auf "Gelöst", ich verschiebe den Beitrag von "Entwicklung" nach "Batch & Shell" und schließe ihn demnächst?

Ich gehe schon mal in Vorleistungen und verschiebe den Thread...

[Wenn noch Fragen offen sind, dann natürlich weiterfragen...]

Gruß
Biber
Bitte warten ..
Mitglied: BatzJunior
19.12.2006 um 08:40 Uhr
Hi Biber und alle anderen,

eine Frage habe ich tatsächlich noch:
Da die Feldlängen ja fest vorgegeben sind, die Längen der Werte ja aber variieren, muss ich für jeden Wert die Länge ermitteln. Zum Glück habe ich dazu ein nettes Batch-Programm im Netz gefunden, welches seine Aufgabe auch (fast) perfekt bewerkstelligt. Das Problem dabei ist jedoch das es seeeehr langsam arbeitet. Somit brauche ich für einen XML-File mit ca. 60 Werten 3 Minuten...
1. Siehst Du/seht ihr im folgenden Code des Programmes noch irgendwelche Verbesserungsmöglichkeiten hinsichtlich der Performance oder muss ich mich mit einem langsamen Programm abfinden?

::setlocal
set errorlevel=-1
if {%1}=={} echo NO ARG GIVEN&call :Help &goto :endit
if {%1}=={/?} call :Help &goto :endit
:start
if {%1}=={} goto :goodendit
set /a paramnum=0
set /a totpos=0
set instring=%1
set instring=%instring:"=%
call :GET_LENGTH %instring%
:goodendit
set /a spaces=%paramnum%-1
set /a totpos=%totpos%+%spaces%
set errorlevel=%totpos%
:endit
::echo %errorlevel%
::endlocal
goto :eof

:GET_LENGTH
:NEXT_STRING
if {%1}=={} goto :eof
set /a paramnum+=1
set string=%1
set /a pos=0
:NEXT_CHAR
set onechar=%%string^:^~%pos%,1%%
for /f "tokens=1,2 delims==" %%a in ('set onechar') do for /f %%c in ('echo %%b') do call :countit %%c
if defined GOTADDED goto :NEXT_CHAR
set /a totpos=%totpos%+%pos%
shift /1
goto :NEXT_STRING

:Help
echo USAGE:%~n0 string OR %~n0 "see with spaces"
echo function returns the length of the string or -1 (error)
echo a string with embedded spaces should be in quotes ex."count letters"
echo in a batch NTscript "for /f %%%%A in ('length STRING') do set var=%%%%A"
set errorlevel=
goto :eof

:countit
set GOTADDED=
if /i {%1}=={echo} goto :eof
set /a pos+=1
set GOTADDED=yes
goto :eof

Vielen Dank an alle!

Daniel
Bitte warten ..
Mitglied: Biber
19.12.2006 um 21:30 Uhr
Na ja, BatzJunior,

sagen wir so: ein bisschen die Luft aus dem Käse drücken könnten wir schon...

Fangen wir langsam an.
Wenn ich die Länge eines Strings, beispielsweise die Länge meiner Variablen %path% wissen wollte, würde ich am CMD-Prompt eintippseln:
01.
>(@echo %path%>x) & @for %i in (x) do @set /a "%~zi-2" & del x 
02.
672
...und 672 wäre auch die Länge von meinem %path%.
Okay, weil ich nicht so oft aufräume natürlich.

Wenn du so etwas als Call-baren Block :GetLen brauchst, hier eine kleine Demo:
01.
::----------snipp GetStringlenDemo.bat 
02.
@echo off & Setlocal & Set "@=%temp%\strlen.tmp" 
03.
::--Begin DEMOSTUFF 
04.
Set "EinSatz=seht ihr im folgenden Code des Programmes noch irgendwelche "Verbesserungsmöglichkeiten" hinsichtlich der Performance oder muss ich mich mit einem langsamen Programm abfinden?" 
05.
Set "M$="Sympathischer Weltmarktführer"" 
06.
(Echo 1.Demo Länge vom String [%M$%] ermitteln:) & call :getLen %M$% && echo ---  
07.
(Echo 2.Demo Länge vom String [%EinSatz%] ermitteln:) 
08.
For /f "tokens=1,*" %%i in ("%Einsatz%") do call:GetAllLen %%i %%j 
09.
del %@% & goto :eof 
10.
  
11.
:GetAllLen 
12.
call:Getlen %1 
13.
If [%2]==[] goto :eof 
14.
shift & Goto GetAllLen 
15.
::--End DEMOSTUFF   
16.
:getlen 
17.
(echo.%1>%@%) & for %%i in (%@%) do @set /a strlen=%%~zi-2 
18.
@echo Länge von [%1] ist [%strlen%] 
19.
::----------snipp GetStringlenDemo.bat
Demo der Demo:
01.
(=21:16:54  D:\temp=) 
02.
>f:\administrator\GetStringLenDemo.bat 
03.
1.Demo Länge vom String ["Sympathischer Weltmarktführer"] ermitteln: 
04.
Länge von ["Sympathischer Weltmarktführer"] ist [31] 
05.
--- 
06.
2.Demo Länge vom String [seht ihr im folgenden Code des Programmes noch irgendwelche "Verbesserungs 
07.
öglichkeiten" hinsichtlich der Performance oder muss ich mich mit einem langsamen Programm abfinden 
08.
] ermitteln: 
09.
Länge von [seht] ist [4] 
10.
Länge von [ihr] ist [3] 
11.
Länge von [im] ist [2] 
12.
Länge von [folgenden] ist [9] 
13.
Länge von [Code] ist [4] 
14.
Länge von [des] ist [3] 
15.
Länge von [Programmes] ist [10] 
16.
Länge von [noch] ist [4] 
17.
Länge von [irgendwelche] ist [12] 
18.
Länge von ["Verbesserungsmöglichkeiten"] ist [28] 
19.
Länge von [hinsichtlich] ist [12] 
20.
Länge von [der] ist [3] 
21.
Länge von [Performance] ist [11] 
22.
Länge von [oder] ist [4] 
23.
Länge von [muss] ist [4] 
24.
Länge von [ich] ist [3] 
25.
Länge von [mich] ist [4] 
26.
Länge von [mit] ist [3] 
27.
Länge von [einem] ist [5] 
28.
Länge von [langsamen] ist [9] 
29.
Länge von [Programm] ist [8] 
30.
Länge von [abfinden?] ist [9] 
31.
 
32.
(=21:16:55  D:\temp=)
Ich habe die bei meinem Prompt angezeigte Uhrzeit mit gepastet/gepostet.
Dauert also nicht soooooooooo lange.

HTH
Biber

P.S. Ich habe auch Strings mit "embedded spaces" berücksichtigt
P.P.S. Ein String der Länge 0 würde die Länge 0 haben statt -1 bei Dir.
P.P.P.S. Meinst Du, wir bekommen noch einen grünen Haken dran vor Silvester?
Bitte warten ..
Mitglied: Biber
20.12.2006 um 17:10 Uhr
Moin BatzJunior,

danke für das Haken-Setzen.
Ich setze meinerseits diesen Thread jetzt auf "Geschlossen" - wir sehen uns ja ohnehin im nächsten Thread

Gruß
Biber
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Schreiben eines Strings mit Leerzeichen in eine Datei

gelöst Frage von c20082005Batch & Shell6 Kommentare

Hallo, nach langem Rum- und Ausprobieren möchte ich Euch um Hilfe bitten für folgendes Problem: Ich möchte mit einer ...

Microsoft Office

Zeilenumbruch in Datengrafik verhindern (Visio 2013)

gelöst Frage von Fenris14Microsoft Office3 Kommentare

Guten Abend, ich hab da ein kleines Problemchen. Wenn ich beispielsweise einen Server-Shape mit einer IP-Adresse per Datengrafik beschrifte, ...

Batch & Shell

Leerzeichen als Delimiter funktioniert nicht, ist es ein Leerzeichen?

gelöst Frage von AcJokerBatch & Shell2 Kommentare

Hallo, ich würde gerne mit diese Textdatei auslesen und in Tokens aufteilen Eigentlich sollte ich so in %%i doch ...

CSS

Zeilenumbruch ohne br

gelöst Frage von ANTiNATORCSS2 Kommentare

Ich habe einen <div> in den durch ein phpscript der Inhalt einer Textdatei eingegeben wird. Welcher wiederum aus einem ...

Neue Wissensbeiträge
Router & Routing

Endlich: Reines Kabel-TV Modem in D erhältlich !

Information von aqui vor 1 TagRouter & Routing9 Kommentare

Mit dem Technicolor TC4400-EU Modem sind nun auch Breitband Router ohne integriertes Modem oder Firewalls wie z.B. die pfSense ...

Netzwerkgrundlagen
The Illustrated TLS Connection
Information von Lochkartenstanzer vor 2 TagenNetzwerkgrundlagen

Moin, Unter findet man eine gelungene Erläuterung von TLS. Fördert sehr das verständnis darüber, was da passiert. lks

Windows 10

Zuverlässiger Remove-AppxProvisionedPackage Ausführen in W10-1803

Tipp von NetzwerkDude vor 4 TagenWindows 104 Kommentare

Moin, Remove-AppxProvisionedPackage hat in 1709 recht zuverlässig funktioniert, in 1803 ist es leider so das es gerne mail failed ...

LAN, WAN, Wireless
Erfahrung mit dem tplink eap115-wall
Erfahrungsbericht von fisi-pjm vor 4 TagenLAN, WAN, Wireless

Die Hintergründe Als ausgebildeter Fisi und ambitionierter "Hobby ITler" bin ich Netzwerktechnisch immer auf der Suche nach "schönen" Lösungen ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Netzwerklaufwerk verbinden nicht möglich
gelöst Frage von SteiniMNetzwerkmanagement13 Kommentare

Hallo Leute, ich bin neu hier und brauche eure Hilfe. Danke schon mal im Voraus. Ich habe folgendes Problem: ...

Apache Server
Webserver überlastet - wie entlasten?
Frage von coltseaversApache Server13 Kommentare

Hi ho, ich hoste aktuell für nen Kunden eine Webseite basierend auf Wordpress. Die Seite liegt auf einem Debian ...

Windows Server
AD User wird immer wieder gesperrt
Frage von YellowcakeWindows Server12 Kommentare

Hey ich habe einen User (ein GL User - Natürlich was denn sonst) der immer wieder gesperrt wird. Ich ...

Netzwerkprotokolle
OpenVPN auf dem Client Verständnisfrage
gelöst Frage von bk900042Netzwerkprotokolle11 Kommentare

Hallo Community, möchte OpenVPN benutzen, um mich über VPN per RDP zu einem Server zu verbinden und auch GIT ...