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, 13869 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
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 ...

Batch & Shell
Zeilenumbruch in eventcreate
Frage von hansis1Batch & Shell7 Kommentare

Hallo! Ich möchte mit eventcreate in das WindowsLog schreiben. Allerdings brauche ich dafür auch Zeilenumbrüche. Wie kann ich das ...

Batch & Shell
Powershell - Zeilenumbruch in Mail
gelöst Frage von rodgerwilcoBatch & Shell2 Kommentare

Hallo zusammen, es wäre schön, wenn jemand zu meinem Problem eine Lösung hätte. Ich möchte per Mail Statusinformationen zu ...

Microsoft Office

Word: Zeilenumbruch bei Textmarke entfernen

Frage von BadgerMicrosoft Office

Hallo, folgende Ausgangslage: In einem Word Dokument sind Textmarken von verschiedenen Excel-Zeilen vorhanden: Das Problem ist, dass automatisch immer ...

Neue Wissensbeiträge
Humor (lol)
Administrator.de Perlen
Tipp von DerWindowsFreak2 vor 11 StundenHumor (lol)2 Kommentare

Hallo, Heute beim stöbern auf dieser Seite bin auf folgenden Thread aus dem Jahre 2006 gestossen: Was meint ihr? ...

Erkennung und -Abwehr
OpenSSH-Backdoor Malware erkennen
Tipp von Frank vor 1 TagErkennung und -Abwehr

Sicherheitsforscher von Eset haben 21 Malware-Familien untersucht. Die Malware soll Hintertüren via OpenSSH bereitstellen, so dass Angreifer Fernzugriff auf ...

iOS
WatchChat für Whatsapp
Tipp von Criemo vor 4 TageniOS5 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor!
Tipp von Criemo vor 5 TageniOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Heiß diskutierte Inhalte
Festplatten, SSD, Raid
SSD zeigt falsche Werte
Frage von karl2014Festplatten, SSD, Raid25 Kommentare

Ich habe ein Problem mit der SSD in meinem Laptop mit Windows 10. Es ist eine 1Tb Platte die ...

Server-Hardware
WS 2016 Essentials Hardware
Frage von ChefknechtServer-Hardware23 Kommentare

Moin welche Hardware würdet ihr empfehlen? Dell Poweredge HP Proliant Fujitsu Ich bin total konfus was nun nötig ist, ...

Ubuntu
Installation freerdp 2.0.0-rc4
Frage von kristovUbuntu20 Kommentare

Hallo, möchte freerdp 2.0.0-rc4 auf linux mint 18.3 installieren, habe aber keine Ahnung, wie das funktioniert. freerdp 1.1 ist ...

Windows Server
Welche Option fürs Windows Server Installations besser
Frage von backitWindows Server20 Kommentare

Hi Zusammen, ich werde unserer AD (SBS 2011) und Exchange 2010 Servern auf neuen physikalischen Server umziehen. ich habe ...