Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Zeilenweise auslesen und in Variablen speichern

Frage Entwicklung Batch & Shell

Mitglied: Apop85

Apop85 (Level 1) - Jetzt verbinden

16.04.2013, aktualisiert 08:57 Uhr, 1282 Aufrufe, 11 Kommentare, 1 Danke

Hallo erstmal.
Ich hab schon zig einträge dieser Art hier gefunden und trozdem... bin ich wieder da...

Ich hab das Script von einem anderen Thread hier übernommen und in der Test-Bat funktioniert dies auch Tip Top, nur meine implementierung in das Hauptscript will einfach nicht hinhauen...

Original:
01.
@echo off 
02.
set line= 
03.
set /a count=0 
04.
FOR /f "delims=" %%f IN ('type "test.txt"') DO call :ProcessLine "%%f" 
05.
 
06.
exit 
07.
:ProcessLine 
08.
if %count%==0 goto :NewLine 
09.
set /a count+=1 
10.
If %count% GTR 1 goto :NewLine 
11.
goto :eof 
12.
:NewLine 
13.
If %count% neq 0 echo %count% - %line% - %workflow% 
14.
set "line=%~1" 
15.
set /a count=1 
16.
goto :eof
Meine Implementierung:
01.
02.
03.
04.
:LISTUSER 
05.
if exist %tmp%\rlh.tmp del %tmp%\rlh.tmp 
06.
if not exist %tmp%\userlist.tmp copy NUL %tmp%\userlist.tmp >NUL 
07.
if not exist %tmp%\rlh.tmp copy NUL %tmp%\rlh.tmp >NUL 
08.
 
09.
wbat cls (+white on +red) ! text 0 :title #%zpos% +5 
10.
wbat text (black on +white) 12,28 "Datenbank wird ausgelesen..." 
11.
 
12.
set /a counter=0 
13.
set zeile= 
14.
for /f "delims=" %%f IN ('type "%cd%\user\system.cry"') DO call :WORKFLOW "%%f" 
15.
goto USERLIST 
16.
 
17.
:WORKFLOW 
18.
if %counter% == 0 goto WORKFLOW2 
19.
set /a counter+=1 
20.
if %counter% GTR 1 goto WORKFLOW2 
21.
goto :eof 
22.
 
23.
:WORKFLOW2 
24.
if defined zeile echo %zeile% >>%tmp%\rlh.tmp 
25.
set suchstr=%zeile:~-21% 
26.
 
27.
for /f "tokens=1-2 delims=-" %%i in ('findstr "%suchstr%" "%tmp%\rlh.tmp"') do ( 
28.
	set "liID=%%i" 
29.
	set "cryptli=%%j" 
30.
31.
 
32.
set "zeile=%~1"  
33.
set /a counter=1 
34.
 
35.
set... definitionen für %liname% und %linaname% 
36.
 
37.
rem -- Ausgang für Suche nach einer bestimmten Zeile ---- 
38.
if "%wbat%" == "%liname% %linaname%" goto USERINFO 
39.
rem ---------------------------------------------------- 
40.
 
41.
>>%tmp%\userlist.tmp echo %liname% %linaname% --> Auflistung der gefundenen Zeilen 
42.
 
43.
goto :eof 
44.
45.
46.
.
Er scheint zwar zu erkennen, dass das Dokument nur zwei Zeilen besitzt jedoch habe ich in der Ausgabe schlussendlich zwei gleiche Einträge (der ersten Zeile) in meiner tmp. Daher auch meine Annahme, dass er die Zeilenanzahl richtig erkennt...

Ich seh langsam den Wald vor lauter Bäumen nicht... Ich sehe in den Wesentlichen Befehlen der zwei Scripts keine Unterschiede...

Wo zum Kuckuck hab ich da mist gebaut? ^^

Grüsse Apop

P.S:
Die wbat-Befehle sind aus dem Batch-Utility WBAT
Mitglied: Endoro
16.04.2013 um 10:46 Uhr
Hallo Apop85,

ich habe keinerlei Lust mich mit diesem cruden Code auseinander zusetzen! Weiss nicht, ob sonst jemand.

Vielleicht kannst du ja einfach mal dazu sagen, was der machen soll und nicht, wo du ihn gefunden hast.

Ausserdem: wer ist "wbat"? Muss ich den kennen ??


Gruss!
Bitte warten ..
Mitglied: Apop85
16.04.2013 um 12:03 Uhr
Hey @Endoro, mal wieder ;)
Danke für deine Aktive Unterstützung

Vielleicht kannst du ja einfach mal dazu sagen, was der machen soll und nicht, wo du ihn gefunden hast.
Er soll (ohne VBS, weil bei uns in der Firma nicht drin ) Zeile um Zeile einer datei Auslesen und Inhalte dieser Zeile als Variabel speichern (liname und linaname) danach zu nächsten und so weiter...



Ausserdem: wer ist "wbat"? Muss ich den kennen ??
http://www.administrator.de/wissen/batchutility-wbat-205045.html

Grüsse Apop
Bitte warten ..
Mitglied: Endoro
16.04.2013 um 13:03 Uhr
Hallo Apop85,

das folgende Programm liest alle Zeilen aus file.txt und speichert die in "var1", "var2" ... "varXX".

01.
@echo off&setlocal  
02.
for /f "tokens=1*delims=:" %%i in ('^< file.txt findstr /n "^"') do set "var%%i=%%j"

Gruss!
Bitte warten ..
Mitglied: Apop85
16.04.2013 um 13:56 Uhr
Da hängt er sich auf...

01.
for /f "tokens=1*delims=:" %%i in ('^< test.txt findstr /n "^"') do set "var%%i=%%j"
Ich weiss ja du willst dich nicht zu sehr in das Geknurze reinlesen aber ich Post trozdem mal meinen Ansatz (CUT-Version -) )

01.
@echo off 
02.
setlocal ENABLEDELAYEDEXPANSION 
03.
:1 
04.
set counter=0 
05.
for /f "tokens=1*delims=:" %%i in ('^< test.txt findstr /n "^"') do set "var%%i=%%j" 
06.
 
07.
:2 
08.
set /a counter+=1 
09.
set outp=var%counter% 
10.
if "!%outp%!" == "" goto :eof   
11.
if "!%outp%!" neq "" echo %zeile%>>rlh.tmp 
12.
 
13.
set zeile=%zeile:~-21% 
14.
for /f "tokens=1-2 delims=-" %%i in ('findstr %zeile% "^"')  
15.
   ( do set "liID=%%j" & do set "cryptli=%%k" ) 
16.
    
17.
set "b1=%cryptli:~13,1%" & set "p1=%cryptli:~18,1%" 
18.
 
19.
... entschlüsselung in Username und Benutzerrechte... 
20.
 
21.
set "liname=%b1%%b2%%b3%%b4%%b5%%b6%%b7%%b8%" 
22.
set "linaname=%p1%%p2%%p3%%p4%%p5%%p6%%p7%%p8%" 
23.
set "livis=%v1%%v2%%v3%" 
24.
set "lirights=%r1%%r2%" 
25.
 
26.
if "%lirights%" == "ad" set "lirights=Admin" else set "lirights=User" 
27.
if "%wbat%" == "%liname% %linaname%" goto USERINFO 
28.
 
29.
>>%tmp%\userlist.tmp echo %liname% %linaname% 
30.
 
31.
goto 2
Diese userlist.tmp verwender ich dann mittels WBAT als Listenanzeige daher das mühsame Entschlüsseln.

Gruss
Bitte warten ..
Mitglied: Endoro
16.04.2013 um 14:21 Uhr
Zitat von Apop85:
Da hängt er sich auf...

Ich habe grad mal ohne Probleme eine TXT mit 10.000 Zeilen und 50 Buchstaben / Zeile eingelesen. Wie gross ist deine TXT? Was hast du für ein System?


Gruss!
Bitte warten ..
Mitglied: Apop85
16.04.2013 um 15:12 Uhr
Wie gross ist deine TXT? Was hast du für ein System?
Winzig bis jetzt ^^. Hab Grad mal 14 Zeilen in der test.txt drin. Da drin steht nur x. Zeile y. Zeile....

Im richtigen File sind die Daten folgendermassen hinterlegt:

00000000-semg3ndhuf1kpaljb2ico - Sind zwei Infos:[ID] - [Username,Rechte]

Aus dem möchte ich die ID und den Rest extrahieren. Den Rest Entschlüssel ich dann zu Name Rechte usw...

gruss.
Bitte warten ..
Mitglied: Endoro
16.04.2013, aktualisiert um 15:59 Uhr
"userID" und "rest" könnte gleich am Anfang getrennt werden, wenn ein "-" dazwischen ist:

01.
@echo off&setlocal 
02.
for /f "tokens=1-3delims=:-" %%i in ('^< file.txt findstr /n "^"') do set "userid%%i=%%j"&set "rest%%i=%%k"& set /a cnt+=1 
03.
for /l %%i in (1,1,%cnt%) do ( 
04.
	setlocal enabledelayedexpansion 
05.
	echo(userID: !userID%%i! Rest: !rest%%i! 
06.
	endlocal 
07.
)

Gruss!
Bitte warten ..
Mitglied: Apop85
18.04.2013, aktualisiert um 03:33 Uhr
Ja das geht so
Habs jetzt meinen Bedürfnissen etwas angepasst aber es will leider noch immer nicht so ganz

01.
for /f "tokens=1-3 delims=:-" %%i in ('^< "%server%\user\system.cry" findstr /n "^"') do set "userid%%i=%%j"&set "rest%%i=%%k"& set /a cnt+=1 
02.
for /l %%i in (1,1,%cnt%) do ( 
03.
	 
04.
 
05.
 
06.
set "b1=!rest%%i:~13,1!" & set "p1=!rest%%i:~18,1%! 
07.
usw... 
08.
 
09.
set "name=%b1%%b2%%b3%%b4%%b5%%b6%%b7%%b8%" 
10.
set "nachname=%p1%%p2%%p3%%p4%%p5%%p6%%p7%%p8%" 
11.
 
12.
set "visum=%v1%%v2%%v3%" 
13.
set "benutzerrechte=%r1%%r2%" 
14.
echo !userID!-!name!-!nachname!-!benutzerrechte!-!visum! >>%tmp%\user.lis  
15.
)
Ich hab dann pro Zeile die existiert einen Eintrag der ersten Zeile.
Also wenn Zeile 1 z.B. 00000000000-abcdefghijkl ist und Zeile 2 111111111111-mnopqrstuvw
dann hab ich in der user.lis zwei mal 00000000000-acefhjlbegik drin...bei vier Einträgen vier mal usw...
Die decodierung funktioniert soweit. Nur eben dass er nur immer das selbe decodiert.

Gruss Apop
Bitte warten ..
Mitglied: Endoro
18.04.2013, aktualisiert um 09:13 Uhr
Hallo Apop85,

wenn sich in Batch was überraschend nicht ändert was es eigentlich sollte liegt es meistens an der fehlenden verzögerten Erweiterung. Die muss aber vorsichtig benutzt werden, weil sie Ausrufungszeichen und Carets in Variablen rückstandsfrei entfernt. Allerdings nicht rückwirkend, weshalb ich sie in Forschleifen an- und ausschalte.

Beispiel für das Wirken der verzögerten Erweiterung:
01.
@echo off &setlocal  
02.
set "string1=a!!^^ ^^ b" 
03.
echo string1: "%string1%" 
04.
setlocal enabledelayedexpansion 
05.
echo string1: "!string1!" ^<--- alles noch da^^! 
06.
set "string2=%string1%" 
07.
echo string2: "%string2%" "!string2!" 
08.
set "string3=!string1!" 
09.
echo string3: "%string3%" "!string3!"
Output:
string1: "a!!^^ ^^ b" 
string1: "a!!^^ ^^ b" <--- alles noch da! 
string2: "a  b" "a^ ^ b" 
string3: "astring3" 
Gruss!
Bitte warten ..
Mitglied: Apop85
18.04.2013, aktualisiert um 17:11 Uhr
Hey Endoro. Jupp hattest recht musste noch etwas mit den Verzögerungen basteln und nun funktioniert es so wie ich will... Nur Zeile 11 will noch nicht. Da habe ich einen Ausgang falls in einem Menü ein bestimmter Name angewählt wurde. da geht er mir nicht aus enabledelayedexpansion raus... musste dann halt noch bei :USERINFO ein setlocal disabledelayedexpansion reinschreiben...
01.
for /f "tokens=1-3 delims=:-" %%i in ('^< "%server%\user\system.cry" findstr /n "^"') do set "userid%%i=%%j"&set "rest%%i=%%k"& set /a cnt+=1 
02.
for /l %%i in (1,1,%cnt%) do ( 
03.
 
04.
setlocal enabledelayedexpansion 
05.
 
06.
set "b1=!rest%%i:~13,1!" & set "p1=!rest%%i:~18,1!" 
07.
blablabla usw... 
08.
set "lirights=!r1!!r2!" 
09.
set "liID=!userID%%i!" 
10.
echo !liname!-!linaname! >>%tmp%\user.lis  
11.
if "%wbat%" == "!liname!-!linaname!" endlocal & goto USERINFO 
12.
endlocal 
13.
14.
 
Danke für deine Hilfe
Bitte warten ..
Mitglied: Apop85
18.04.2013 um 20:41 Uhr
Habs nun lösen können indem ich endlocal nicht verwendet habe sondern einfach das delayedexpansions wieder ausgeschaltet habe. Mit dem endlocal hat er mir ja die Variablen gelöscht bevor ich sie Anzeige

Ich danke dir für deine Hilfe

Liebe Grüsse Apop
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Java
gelöst Textdatei in Array speichern (zeilenweise) (1)

Frage von Bruchsal zum Thema Java ...

Batch & Shell
gelöst Einzelne Zeilen in txt Datei speichern und auslesen (7)

Frage von noah1400 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...