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

Per Batch Zeile Nr. xy einer txt-Datei auslesen

Frage Entwicklung Batch & Shell

Mitglied: martinstein

martinstein (Level 1) - Jetzt verbinden

14.03.2011 um 18:52 Uhr, 6074 Aufrufe, 13 Kommentare

Hallo,

ihr seid mal wieder meine letzte Hoffnung. Vorabinfo: An den Umständen zu folgendem Problem (Dateitypen, Ablauf etc.) kann ich nichts ändern.

Ich habe unter WinXP eine txt-Datei mit gut 40000 Zeilen, in jeder Zeile steht ein Wort. Und ich habe ein Programm, das bei einem Ereignis eine Batch in Gang setzt und ihr einen Zahlenwert übergibt. Der Zahlenwert ist praktischerweise die Nummer der Zeile, in der in der txt-Datei das gesuchte Wort steht, und über diese Zuordnung soll das Wort der Batch übergeben werden. Folgendes habe ich schon probiert:

Mit FOR /F "skip=xy... zur entsprechenden Zeile springen, ab da alles in eine temporäre txt-Datei schreiben und aus dieser wiederum nur die erste Zeile einlesen.

Bei 40000 Zeilen ist das aber in meinem Fall nicht praktikabel. Deshalb meine Frage:

Gibt es eine einfachere Möglichkeit, das mit Batch zu lösen? Und wenn nein, hat jemand eine Idee, wie es sonst gehen könnte? VBS vielleicht?

Vielen Dank im Voraus und viele Grüße

Martin
Mitglied: mathe172
14.03.2011 um 19:42 Uhr
Hallo Martin!

Versuchs mal so:
01.
@echo off 
02.
set "Datei=%~dp0\test.txt" 
03.
set /a "ZeileNr=%~1-1" 
04.
>%Temp%\Zeile.txt more +%ZeileNr% "%Datei%" 
05.
set /p Zeile=<"%Temp%\Zeile.txt" 
06.
del %Temp%\Zeile.txt 
07.
echo Nun steht in der Variable Zeile: %Zeile% 
08.
pause>nul
Mathe172
PS: Bei mir braucht es für die 27744225. Zeile 14Sekunden
Bitte warten ..
Mitglied: bastla
14.03.2011 um 20:30 Uhr
Hallo mathe!

Und wie lange dauert's mit
01.
@echo off & setlocal 
02.
set "Datei=%~dp0test.txt" 
03.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Datei%"^|findstr /b "%~1:"') do set "Zeile=%%j" 
04.
echo %Zeile%
Grüße
bastla
Bitte warten ..
Mitglied: Biber
14.03.2011 um 20:53 Uhr
Moin bastla,

[OT]
Zitat von bastla:
Und wie lange dauert's mit...
Wenn ich so als Laie Vermutungen über die vermutlichen cw-Werte der beiden Schnipsel anstellen sollte...

Hmm......nehm ich jetzt das Kompakte oer eher das Windschnittige vom Kompakten...? <*grybel*> ...

Grüße
Biber
[/OT]
Bitte warten ..
Mitglied: mathe172
14.03.2011 um 21:34 Uhr
Hallo,

@bastla: Respekt, deine Batch ist noch schneller.
Tests für die 27'744'225.Zeile:
Meine Batch (ich weiss nicht wie schnell meine wäre, würden noch viele viele Zeilen danach kommen...):
Von: 21:21:24.49
Bis: 21:21:31.98
Deine (sind 2 findstr so schnell!?):
Von: 21:32:05.32
Bis: 21:32:16.72

Mathe172
PS:@Martin: Ich glaube nicht dass es bei deinen "nur" 40000 Zeilen wirklich lange geht
Bitte warten ..
Mitglied: bastla
14.03.2011 um 21:40 Uhr
@mathe
sind 2 findstr so schnell!?
Wusste ich auch nicht - aber Da Du gerade eine passende Testdatei hattest, dachte ich, ich frage mal ...
(Zu berücksichtigen wäre, dass bei "findstr" in den Speicher und nicht auf einen Datenträger geschrieben wird.)

... ansonsten sähe ich das allerdings auch so: bei 40000 Zeilen dürfte es ziemlich egal sein ...

Grüße
bastla

P.S.:
ich weiss nicht wie schnell meine wäre, würden noch viele viele Zeilen danach kommen...
Versuch es doch einfach einmal für die Zeile 20'000'000 ...
Bitte warten ..
Mitglied: 76109
14.03.2011 um 22:16 Uhr
Hallo @All

und mit VBS (SkipLine) dauerts:
40.000 Zeilen = 1 Sekunde
27.744.225 Zeilen = 58 Sekunden

Gruß Dieter
Bitte warten ..
Mitglied: pieh-ejdsch
14.03.2011 um 22:21 Uhr
moin,
[OT]
Deine (sind 2 findstr so schnell!?):
Von: 21:32:05.32
Bis: 21:32:16.72
wieso eigentlich so lange? das sind ja ääähm über 11 sekunden. hast Du ne Bremse Eingebaut.
Normal geht das sst und fertsch.

wie Testest Du die Laufzeit Deiner Batches?
Ich machs immer damit:
01.
:: ---- schnipp ---- stopme.cmd 
02.
:: usage: stopme.cmd Batchfile 
03.
@echo off 
04.
setlocal 
05.
if not "%~1" == "" goto :start 
06.
set "startzeit=1" 
07.
set "stopzeit=1" 
08.
set /p startzeit=Bitte Enter druecken um den Timer zu starten! 
09.
:start 
10.
set "startzeit=%time%" 
11.
if not "%~1" == "" (call %* 
12.
goto :stop 
13.
14.
set /p "stopzeit=Bitte Enter druecken um den Timer zu stoppen! 
15.
:stop 
16.
set "stopzeit=%time% 
17.
if "%startzeit:~0,1%" == " " set "startzeit=%startzeit:~1%" 
18.
if "%stopzeit:~0,1%" == " " set "stopzeit=%stopzeit:~1%" 
19.
for %%i in ("%startzeit%" "%stopzeit%") do for /f "tokens=1-4 delims=:," %%j in (%%i) do ( 
20.
	if defined sec set /a sec1=sec 
21.
	set /a sec=10%%l%%m %%10000,sec+=10%%k00 %%10000 * 60,sec+=10%%j00 %%10000 *3600 
22.
	if defined sec1 set /a sec-=sec1 
23.
24.
set /a HH =sec / 360000,sec%%=360000,min=100+sec/6000,sec%%=6000,sec+=10000 
25.
echo %HH%:%min:~-2%:%sec:~-4,2%,%sec:~-2% >&3 
26.
if "%~1" == "" echo.Drueck mich!&pause>nul 
27.
:: ---- schnapp ---- stopme.cmd
etwas genauer
[/OT]

Gruß Phil
Bitte warten ..
Mitglied: bastla
14.03.2011 um 22:38 Uhr
@PH
Normal geht das sst und fertsch.
Für eine Textdatei mit mindestens 27.744.225 Zeilen?

Grüße
bastla
Bitte warten ..
Mitglied: pieh-ejdsch
14.03.2011 um 22:53 Uhr
woher soll ich denn jetzt so eine lange Datei hernehmen? Mal gucken ob eine lange Webseite gibt.

Gruß Phil
Bitte warten ..
Mitglied: 76109
14.03.2011 um 23:21 Uhr
Hallo Phil!

Eventuell so:
01.
for /L %%i in (1,1,27744225) do @echo "Textzeile: %%i">>"%temp%\Test.txt"
Kann aber ein wenig dauern!

Gruß Dieter
Bitte warten ..
Mitglied: pieh-ejdsch
15.03.2011 um 01:14 Uhr
hallo Didi,

ich wollt es bissel realitätsnäher machen. ich hab den Dir paarmal übern Kompletten Rechner gejagt
01.
(for /l %i in (1,1,35) do @echo %i>&3&@for /f %j in ('mountvol^|find ":\"^|sort') do @dir /a/s/b %j)>E:\Test
ich musste dann aber bei 18.Dir (komisch der 1. war der langsamste) abbrechen weil E:\Test schon 1,09 GB groß war.
findstr /n "^" E:\test | find /c ":" in E:\test.cmd ergab bei "stopme e:\test.cmd"
13102885 
0:04:33,95
der Abzählreim liess ertmal die CPU überstunden machen...ist aber noch nix angebrannt!
nun Gut bei 8 mio Zeilen des kleinen files war ich schon bei über 17 sek (was habt'n Ihr für Rennsemmeln als PC???)

Gruß Phil
Bitte warten ..
Mitglied: 76109
15.03.2011 um 08:58 Uhr
Hallo Phil!

Also, die Datei habe ich mit VBS erzeugt und dauert mit Text "Zeile: " ca 3 Minuten.

Der Code von mahte dauert bei mir 17 Sekunden und der Code von bastla dagegen nur 9 Sekunden (SSD-Platte)

Bin auch ziemlich überrascht und auch maßlos enttäuscht, dass das Auslesen mit Batch schneller geht, als mit VBS

Gruß Dieter
Bitte warten ..
Mitglied: martinstein
21.03.2011 um 23:50 Uhr
Hallo,

konnte bastlas Lösungsansatz gerade mal live testen, und es hat wun-der-bar geklappt. Die Ausführungszit ist quasi komplett zu vernachlässigen :D

Danke nochmal für eure großartige Hilfe!

Viele Grüße

Martin
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Mit Batch Zeilen aus TXT modifizieren
gelöst Frage von chef1568Batch & Shell4 Kommentare

Hallo zusammen, leider konnte ich mit den bisherigen Threads mein Problem bisher nicht lösen. Problemstellung: In einer Textdatei sind ...

Entwicklung
Autoit .txt-Datei bestimmte Zeile auslesen
gelöst Frage von pytreloocEntwicklung2 Kommentare

Hallo zusammen, ich habe folgendes Problem. Und zwar versuche ich mit AutoIt eine .txt-Datei so auszulesen dass alles was ...

PHP
TXT Datei auslesen und bestimmte Zeilen in Variable setzen
gelöst Frage von 126594PHP11 Kommentare

Hallo zusammen, vorweg muss ich sagen, ich bin (bis jetzt) absoluter Neuling was PHP angeht. Ich will aus einer ...

Batch & Shell
Einzelne Zeilen in txt Datei speichern und auslesen
gelöst Frage von noah1400Batch & Shell7 Kommentare

Liebe Forum-Mitglieder Ich habe da so eine Frage: Ich bin gerade dabei ein PW abfrage mit Batch zu machen. ...

Neue Wissensbeiträge
Batch & Shell

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

Information von Penny.Cilin vor 10 StundenBatch & Shell8 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 12 StundenHumor (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 ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 1 TagSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Heiß diskutierte Inhalte
Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server17 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...

Windows 10
Bitlocker nach Verschlüsselung nicht mehr aufrufbar!
gelöst Frage von alexlazaWindows 1013 Kommentare

Hallo, ich besitze ein HP ZBook 17 G4 mit einem Windows 10 Pro Betriebssystem. Bei diesem Problem handelt sich, ...

Batch & Shell
Neuste Datei via PowerShell kopieren
gelöst Frage von kaiuwe28Batch & Shell11 Kommentare

Hallo zusammen, ich hatte mir mit Hilfe der Suche im Forum einen kleinen Code von colinardo rausgesucht und versucht ...