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

Frage Entwicklung Batch & Shell

Mitglied: Shadow377

Shadow377 (Level 1) - Jetzt verbinden

17.07.2006, aktualisiert 18.07.2006, 8203 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
Leerzeilen per Batch aus Textdatei entfernen
gelöst Frage von Yenne97Batch & Shell9 Kommentare

Hallo Zusammen Ich bin neu hier. Ich würde gerne einen Batch schreiben der: 1. In einer Textdatei alle Leerzeichen ...

Batch & Shell
Mehrere Zeilen aus einer Anzahl von Textdateien per Batch entfernen
gelöst Frage von lukeskywalker501Batch & Shell4 Kommentare

Hi Leute, erst mal ein dickes moin an euch ! Ich habe folgende Sache und hoffe das ihr mir ...

VB for Applications
VBS-Entfernen von Zeilen in einer Textdatei
Frage von Calim3roVB for Applications5 Kommentare

Hallo zusammen Ich möchte aus einer Textdatei Zeilen entfernen. Ich habe drei Dateien, in Datei "A" stehen Wörter, in ...

Batch & Shell
Entfernen eines Strings vor einem bestimmten Zeichens in einer Textdatei
gelöst Frage von Privex007Batch & Shell3 Kommentare

Hallo an alle Coder, ich habe Probleme mit dem extrahieren eines String aus einer "txt"-Datei. Ich habe folgende Zeilen ...

Neue Wissensbeiträge
Perl

Perl hat heute Geburtstag: 30 Jahre Perl: Lange Gesichter zum Geburtstag

Information von Penny.Cilin vor 1 StundePerl1 Kommentar

Hallo, auch wenn es wenige wissen und noch weniger Leute es nutzen. Perl hat heute Geburtstag. 30 Jahre Perl ...

Sicherheit

Blackberry stirbt - Keine Updates für Priv mehr

Tipp von certifiedit.net vor 2 StundenSicherheit

Blackberry wird zu einer 08/15 Firma und geht wohl mehr und mehr den Weg, den HTC schon ging. Von ...

Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 TagenWindows 108 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 2 TagenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
gelöst Frage von HelloWorldBatch & Shell20 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless11 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Router & Routing
Wieso kann ich den UPD 7000-9000 nicht freigeben?
Frage von Jayk0bRouter & Routing8 Kommentare

Router: Telekom W 723V Ports: UDP 7000-9000 Können nicht frei gegeben werden. Benutzgrund: Rocket League 7000 – 9000 UDP ...

Router & Routing
Fritzbox Gastnetz - exposed Host - zur Sophos IPTV
Frage von medikopterRouter & Routing8 Kommentare

Hallo zusammen, ich habe eine Frage bezüglich des Fritz box Gastzugangs an einer Sophos UTM Home. An liebsten wäre ...