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 Zeilennummerierung einer Textdatei mittels Batch entfernen

Mitglied: Shadow377

Shadow377 (Level 1) - Jetzt verbinden

17.07.2006, aktualisiert 18.07.2006, 8546 Aufrufe, 4 Kommentare

Hallo an allle
Bin neu hier im Forum und hoffe ihr könnt mir hier weiterhelfen..

Ich habe folgendes Problem: Ich muss von mehreren mehrzeiligen Textdateien (z.B. a.txt, b.txt) jeweils eine Zeile zufällig auswählen und ein eine neue Exceltabelle(c.xls) schreiben. Die Quelle für die Textdateien sind Eventlogs (Spalten Typ, Datum, Uhrzeit usw); sie sind durch Tabulatoren getrennt.

Meine Strategie zur Lösung des Problems war folgende:
Ich durchsuche die Dateien für die einzelnen Eventlogs mit findstr systematisch nach jedem Datum eines bestimmten Zeitraumes (beispielsweise 01.07.2006 bis 08.07.2006), schreibe alle Übereinstimmungen in eine eigene Textdatei (wären die oben genannten a.txt, b.txt usw). Dannach nummeriere ich mit findstr /n "^" die Zeilen der einzelnen Dateien durch und leite die Ausgabe in eine andere Datei (für a.txt z.B. a2.txt) um.
Dannach wird mit
Set /A "Counter=0"
FOR /F "delims=" %%A IN (a2.txt) DO SET /A "COUNTER+=1"

durchgezählt, wie viele Zeilen in der Datei a2.txt vorhanden sind, um anschließend mit %random% eine Zahl zu bestimmen; die übereinstimmende Zeilennummer wird dann wieder mit findstr überprüft und ausgegeben.

So weit, so gut; jetzt habe ich genau 1 Zeile pro Tag, die noch immer durch Tabulatoren getrennte Einträge besitzt und somit durch ändern der Extension von txt auf xls zu einer Excel-Tabelle wird.

Allerdings gibt es dabei folgendes Problem:
Die Zeile hat folgenden Aufbau:
Zeilennummer:Spalte1|tab|Spalte2|tab|Spalte3|....

Für das endgültige Resultat muss ich allerdings die Ausgabe OHNE Zeilennummer: erhalten. Ob die Zeilennummer 1, 2 oder auch 6- stellig ist, kann ich im vorhinein nicht sagen, daher ist es auch nicht möglich stur die ersten n-Stellen zu entfernen.
Mitglied: AxelHahn
17.07.2006 um 15:58 Uhr
Hallo,

die Zeilennummer wird doch immer mit ":" getrennt. Dann kannst du in deiner FOR-Schleife mit "tokens=1,2* delims=:" arbeiten.

for /F "tokens=1,2* delims=:" %%a in (Dateiname.txt) do echo %%b

Axel
Bitte warten ..
Mitglied: Shadow377
18.07.2006 um 08:23 Uhr
Danke für diese schnelle Antwort. Leider bin ich nicht so der Batchprofi und verstehe daher auch den Syntax nicht so ganz, wäre super wenn du ihn mir erklären könntest..

Ich habe die Zeile mal kopiert und ausprobiert; dabei habe ich allerdings leider festgestellt, dass die oben genannte Uhrzeit leider darunter leidet und nach den Stunden abgeschnitten wird (inklusive dem Rest der Zeile).
Beispiel: Statt "Durch Tabulatoren getrennte Einträge"|tab|17:20:37|tab|"weitere durch Tabulatoren getrennte Einträge" erhalte ich also nur noch folgende Ausgabe:
Einträge vor Datum|tab|17
Es wird somit die gesamte Zeile nach den Stunden abgeschnitten, das Problem ist allerdings, dass nur vor dem ersten : weggeschnitten werden darf (unabhängig von der Anzahl der Zeichen davor); die restlichen : müssen unbeeinflusst bleiben.
Es ist leider auch nicht sicher vorhersagbar, wie viele : in der Zeile enthalten sind..

Information zur Quelldatei: Sie ist derzeit schon so gefiltert, dass nur noch eine einzige Zeile (Zeilennummer:Zu verarbeitender Text)+einem Zeilenumbruch enthalten sind. Dies ist wohl nicht die optimalste Lösung (lieber wäre es mir, die Dateiausgabe schon bei findstr abzufangen, dann die Zeilennummer zu entfernen und dann erst in eine Datei zu schreiben, allerdings ist mir eine schnelle Lösung des Problems und ein nicht zu komplizierter Code wichtiger...

Ich bin übrigens draufgekommen, dass die folgende Zeile das Ergebnis nur in der cmd ausgiebt, nicht allerdings in eine Datei schreibt, war das beabsichtigt? Das Ergebnis brauche ich nämlich wieder in einer Datei.
Daher habe ich die Zeile wie folgt geändert:
for /F "tokens=1,2* delims=:" %%a in (Quelle.txt) do echo>>Ziel.txt %%b
Bitte warten ..
Mitglied: AxelHahn
18.07.2006 um 08:43 Uhr
Hallo,

wenn das mit der Uhrzeit nicht klappt ... da war doch ein kleiner Fehler. Bei Tokens gib 1* statt 1,2* an.


del output.txt 2>nul
for /F "tokens=1* delims=:" %%a in (datiename.txt) do echo %%b>>output.txt


Erklärung:
a) delims ist der Trenner in der Zeile.
b) tokens gibt an, welche Felder, die durch das (die) Trennzeichen entstehen, zurückgeliefert werden. Die Felder werden in den nächstfolgenden Buchstaben als Variablen abgelegt.

Beispiel:

for /F "tokens=1,4,5 delims=," %%m in (datiename.txt) do echo %%m .. %%n .. %%o

Bei einer Kommaseparierten Liste werden die Felder 1,4 und 5 gelesen. Innerhalb der For-Schleife sind sie als Variablen n, m und o greifbar (ab m hochzählend, weil %%m als Zählvariable angegeben ist).

c) Bei Tokens kann man auch - und * verwenden. Durch den Wert "1*" kann ich genau 2 Felder abgreifen: den Wert vor meinem Trenner und den ganzen Rest ab dem Trenner (unabh. ob das Trennzeichen noch einmal auftaucht oder nicht).

Das erklärte es auch noch einmal:

FOR /?



Schönen Tach noch!
Axel
Bitte warten ..
Mitglied: Shadow377
18.07.2006 um 08:54 Uhr
Super, hat geklappt, vielen Dank
Kompliment übrigens im Bezug auf die wirklich sehr kurzen Antwortzeiten und guten Beiträge. Ich muss sagen auch wenn ich in gewissem Maß damit gerechnet habe bin ich doch positiv überrascht und beeindruckt, dass die Antworten derart schnell kommen

Danke auch für die gute Erklärung
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch Textdatei Spaltenweise auslesen
Frage von PinkFLuffyUnicornBatch & Shell7 Kommentare

hi, ist es irgendwie möglich anstatt eine Textdatei via Batch Spaltenweise auszulesen und nicht zeilenweise wie das normal ganz ...

Batch & Shell
Textdatei verschlüsseln per Batch
gelöst Frage von Nick2212Batch & Shell22 Kommentare

Hi Leute ich wollte einmal fragen ob es eine Möglichkeit gibt, den Inhalt einer Textdatei per Batch zu verschlüsseln ...

Batch & Shell
Batch: Textdatei Zeilenweise auslesen
gelöst Frage von CreatorXBatch & Shell2 Kommentare

Hallo, ich weiß, zu dem Thema gibt es schon unzählige Threads. Ich hab auch einiges dazu gefunden und trotzdem ...

Batch & Shell
Batch Datei - Mehrzeilige Textdatei
gelöst Frage von SchmakusBatch & Shell5 Kommentare

Hallo Zusammen, ich möchte mit einer Batch Datei eine Textdatei erstellen. Ich verwende 2 Variablen (%1, %2). Die Textdatei ...

Neue Wissensbeiträge
Windows 7

Windows 7 u. Server 2008 (R2) SHA-2-Update kommt am 12. März 2019

Information von kgborn vor 1 TagWindows 74 Kommentare

Kleine Info für die Admins der oben genannten Maschinen. Ab Juli 2019 werden Updates von Microsoft nur noch mit ...

Firewall
PfSense 2.5.0 benötigt doch kein AES-NI
Information von ChriBo vor 2 TagenFirewall2 Kommentare

Hallo, Wie sich einige hier erinnern werden hat Jim Thompson in diesem Aritkel beschrieben, daß ab Version 2.5.0 ein ...

Internet
Copyright-Reform: Upload-Filter
Information von Frank vor 4 TagenInternet1 Kommentar

Hallo, viele Menschen reden aktuell von Upload-Filtern. Sie reden darüber, als wären es eine Selbstverständlichkeit, das Upload-Filter den Seitenbetreibern ...

Google Android

Blokada: Tracking und Werbung unter Android unterbinden

Information von AnkhMorpork vor 4 TagenGoogle Android1 Kommentar

In Ergänzung zu meinem vorherigen Beitrag: Blokada efficiently blocks ads, tracking and malware. It saves your data plan, makes ...

Heiß diskutierte Inhalte
Hardware
IT-Werkzeugkoffer bis 50,- EUR
gelöst Frage von departure69Hardware35 Kommentare

Hallo. Ich bin als IT-Systembetreuer einer Gemeinde zusätzlich auch der IT-Systembetreuer einer Grund- und Hauptschule. Dort muß ich jedoch ...

Netzwerke
Verteilung von Programmdaten außerhalb des internen Netzwerkes
Frage von mertaufmbergNetzwerke24 Kommentare

Guten Morgen liebe Administratoren, ich versuche zurzeit eine möglichst sichere und einfache Lösung zu suchen, um ein Programmverzeichnis über ...

Netzwerkmanagement
Richtfunknetzwerk mit vielen Hops stabiler gestalten
Frage von turti83Netzwerkmanagement21 Kommentare

Hallo, in meinem Dorf habe ich vor ca. einem Jahr ein Backbone aufgebaut um die Nachbarschaft mit Internet zu ...

Hyper-V
Intel MSC Raid 5 Rebuild
Frage von DannysHyper-V19 Kommentare

Hallo Community, Ich habe einen Modul Server von Intel in Betrieb. Dort ist eine Festplatte aus dem Raid 5 ...