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

String mit Delimitern (Trennzeichen) in Substrings zerlegen?

Frage Entwicklung Batch & Shell

Mitglied: jutzin

jutzin (Level 1) - Jetzt verbinden

15.12.2006, aktualisiert 18.12.2006, 12368 Aufrufe, 6 Kommentare

hi,

ich suche bereits seit geraumer zeit nach einem kochrezept zum zerlegen eines strings der form

abc;defgh;ijklmno1234;...;xyz

in substrings, die dann zur weiteren verarbeitung z.b. in eine datei umgeleitet werden könnten. wie man ein oder mehrere bestimmte tokens ausliest ist mir klar; was aber, wenn ich nicht weiß, wie viele tokens der string enthält und ich alle tokens auslesen will?

beispiel:

01.
REM > substr.txt 
02.
FOR /F "delims=;" %%i IN (string.txt) DO ECHO %%i >> substr.txt
in der datei string.txt steht der string. über den string weiß ich nichts weiter als dass er keine CR/LF enthält und die semikolons als delimiter gelten sollen.

gruß

jutzin


p.s.: es muss batch sein, bitte keine vbscript-lösungen o.ä.! ju
Mitglied: miniversum
15.12.2006 um 09:00 Uhr
Vielleicht gehts nach folgender grober Idee (ungetestet):
Du zerlegst den String. Dabei imemr nur das erste Token udn schreibst es in die Datei substr.txt, den Rest in eine temp.txt
Danach das ganze immer wieder in der temp.txt wiederholen, bis nix mehr in temp.txt geschrieben wird.

set file=substr.txt
set tempfile=temp.txt
FOR /F "tokens=1* delims=;" %%i IN (string.txt) DO ECHO %%i >> %file% && %%j > %tempfile%
:loop
FOR /F "tokens=1* delims=;" %%i IN (%tempfile%) DO ECHO %%i >> %file% && %%j > %tempfile% && if [%%j]=[] goto :eof
call:loop

:eof

miniversum
Bitte warten ..
Mitglied: Biber
15.12.2006 um 09:05 Uhr
Moin jutzin,

willkommen im Forum.

Bitte mach mal etwas konkreter, was Du vorhast.
Beliebig viele Tokens einfach der Reihe nach auslesen geht
a) eigentlich nicht
b) zum Beispiel so:
01.
:: ---snipp 40Tokens.bat 
02.
@echo off & setlocal enableDelayedExpansion 
03.
 
04.
Set testdata=eins;zwei;drei;vier;fünf;sechs;sieben;acht;neun;zehn;elf;zwölf;dreizehn 
05.
Set testdata=%testdata%;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40; 
06.
echo %testdata%>%temp%\40tokens.txt 
07.
 
08.
for /f "delims=; tokens=1,*" %%i in (%temp%\40Tokens.txt) do set "Line=%%j" & call:sub %%i !line:;= ! & goto :eof 
09.
 
10.
:sub  
11.
@echo %1  
12.
If [%2]==[] goto :eof 
13.
Shift & goto :sub 
Demo am CMD-Prompt:
01.
(= 8:57:45  D:\temp=) 
02.
>f:\administrator\40Tokens.bat 
03.
eins 
04.
zwei 
05.
drei 
06.
vier 
07.
fünf 
08.
... 
09.
34 
10.
35 
11.
36 
12.
37 
13.
38 
14.
39 
15.
40 
16.
 
17.
(= 9:00:40  D:\temp=)
Gruß
Biber
[Edit]
Tippfehler berichtigt. Alt:!%line:;= ! ------> in neu: !line:;= ! . Siehe Kommentar unten.
Bitte warten ..
Mitglied: jutzin
16.12.2006 um 17:57 Uhr
hallo zusammen!

erstmal vielen dank an miniversum und biber! eure kommentare hier im forum haben mir schon tierisch oft weitergeholfen.


dann mal zunächst etwas konkreteres zu meinem problem:

  • ich bekomme von einem messgerät einen endlos langen string mit messwerten geliefert, die semikolongetrennt sind. das format der messwerte kann von gerät zu gerät variieren, je nachdem welche geräteversion angeschlossen ist, ob tag oder nacht ist, welche api benutzt wird etc. etc. -- nur dass die werte durch semikolons getrennt sind ist immer der fall.

  • die werte sollen auf einem minirechner an ein plot-programm übergeben werden, dass die werte nur zeilenweise aus einer datei mit einem bestimmten dateinamen auslesen kann.

  • das plot-programm ist älteren datums und darf, da es bereits verteilt ist, nicht mehr geändert werden.

  • die minirechner werden aus wartungs- und kostengründen mit einer art dos betrieben, das mit ein, zwei ausnahmen den funktionsumfang der windows_nt-shell hat.


zu den lösungen:

@miniversum: nach dem prinzip hatte ich mir das auch vorgestellt. leider bewirkt (vermutlich und merkwürdigerweise)
01.
 && if [%%j]=[] goto :eof
in zeile 5 in deinem code, dass das nächste token ausgeführt wird. das resultiert dann in der ausgabe

Der Befehl "zweites token" ist entweder falsch geschrieben oder konnte nicht gefunden werden
"=[]" ist syntaktisch an dieser Stelle nicht verarbeitbar.

vielleicht kann ja biber licht ins dunkel bringen.


ich hab es in der zwischenzeit aber so ähnlich hinbekommen:
01.
:loop 
02.
for /f "delims=; tokens=1,*" %%i in (string.txt) do echo %%i >> substr.txt & echo %%j > string.txt 
03.
for /f %%i in (string.txt) do if %%i==ECHO goto ende 
04.
goto loop 
05.
 
06.
:ende 
07.
exit /b [errorlevel]

@Biber: super! (fast genau) so mach ich das. ich lasse aber lieber das %-zeichen in zeile 8 in
01.
!%line:;= !
weg, dan funktioniert das nämlich auch ;o) -- viel besser als mein komischer umweg über die ECHO-ausgabe.


besten dank nochmal an euch beide!


gruß
jutzin
Bitte warten ..
Mitglied: Biber
18.12.2006 um 07:06 Uhr
Moin jutzin,

tja, sorry für den Tippfehler... ich nehme mir zwar immer vor, meine Bätschelchen mal zu testen, bevor ich sie poste...
...aber wie das so ist mit guten Vorsätzen...*axelzuck*

Gut, dass Du verstanden hast, was ich eigentlich gemeint habe

Den typo hab ich oben berichtigt.

Bei miniversums Variante fehlt, soweit ich das ohne Testen erkennen kann, vor dem %%j die ECHO-Anweisung.
Wenn die Zeile formatiert wird, sieht man/frau es besser:
01.
... 
02.
:loop 
03.
FOR /F "tokens=1* delims=;" %%i IN (%tempfile%) DO ( 
04.
ECHO %%i >> %file%  
05.
:: #####Um das ECHO in der folgenden Zeile geht es## 
06.
ECHO %%j > %tempfile%  
07.
if [%%j]=[] goto :eof 
08.
call:loop 
09.
10.
...
Setzt Du bitte den Beitrag auf "gelöst", wenn es soweit klappt?
Danke
Biber
Bitte warten ..
Mitglied: miniversum
18.12.2006 um 11:33 Uhr
Tja meine Version war auch nur ne ungetestete Idee.
Aber jeder darf sich denke ich auch mal Tipfehler erlauben solange die Idee verständlich ist ;)

miniversum
Bitte warten ..
Mitglied: jutzin
18.12.2006 um 12:52 Uhr
'türlich! ich sollte wahrscheinlich nicht so spät nachts die antworten lesen, dann wär mir der typo wohl auch aufgefallen. naja, nochmals besten dank an biber und an dich!

jutzin
Bitte warten ..
Ähnliche Inhalte
PHP
String zerlegen an verschieden Stellen
Frage von ppmk22PHP3 Kommentare

ich noch mal Ich habe verschieden Strings die immer 200 Zeichen lang sind. Diesen möchte ich an bestimmten stellen ...

Batch & Shell
String zerlegen an letzem Backslash
gelöst Frage von fuguBatch & Shell4 Kommentare

Heyho ihr Supercoder ;-) Ich möchte für ein Backup-Skript eine Textdatei mit den Backup-Quellen. Die Daten einzulesen ist leicht. ...

Batch & Shell
PowerShell String zerlegen in Array, DataTable, Hashtable speichern
gelöst Frage von derhoeppiBatch & Shell7 Kommentare

Guten Morgen, leider habe wieder ein Thema beim zerlegen eines Strings. Folgendes Problem: Die Rückgabe eines Admintools liefert mir ...

Batch & Shell
Zeichenkette ohne Trennzeichen per FOR-Schleife in einzelne Zeichen zerlegen
gelöst Frage von RaSi76Batch & Shell7 Kommentare

Hallo, trotz intensiver Suche und zahlreichen Versuchen, habe ich bisher keine Lösung für mein (triviales?) Problem finden können, evtl. ...

Neue Wissensbeiträge
Linux

Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde

Information von Frank vor 3 StundenLinux12 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 1 TagBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 1 TagHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Heiß diskutierte Inhalte
Router & Routing
Zwei Netzwerke erstellen
Frage von bunteblumeRouter & Routing14 Kommentare

Hallo Zusammen, Ich möchte gerne ein backup von einem bestimmten Folder welcher auf dem Server regelmässig synchronisiert wird auf ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...

Linux
Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde
Information von FrankLinux12 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Windows 10
Alle Programme mit bestimmtem Namen automatisch (per GPO) deinstallieren
gelöst Frage von lordofremixesWindows 1012 Kommentare

Hallo zusammen, gibt es eine Möglichkeit, alle Programme beginnend mit z.B. "Dell" im Namen per Script und somit per ...