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

In txt nur Wort auslesen und dann mit Textfragmenten ergänzen

Frage Entwicklung Batch & Shell

Mitglied: lalaman

lalaman (Level 1) - Jetzt verbinden

10.02.2008, aktualisiert 18:58 Uhr, 4599 Aufrufe, 10 Kommentare

Guten Morgen allerseits,

habe mich schon ein bisschen über die Sufu durchgesucht aber irgendwie nix wirklich passendes gefunden; also falls ich nicht richtig geguckt hab seht es mir nach.
ich denke dass mein Anliegen nicht besonders schwer/aufregend für euch sein wird:

Ich möchte eine txt (nennen wir sie ganz kreativ Liste.txt) auslesen und ein bestimmtes Wort/Textfragment in einer neuen txt gespeichert aufgelistet dannach auffinden (nennen wir sie Ergebnis.txt). Das Wort hat nach seinem immer gleichbleibenden Anfang immer 2 - 5 variierende Zahlen:

Bsp:

Datei=?1273
Datei=?17345
Datei=?523
Datei=?10
...

wobei der erste Teil wie gesagt immer gleichbleibt (Datei=?). Die Worte sind in Fließtext eingearbeitet. Ich habe mit findstr schon rumprobiert aber bekomme immer nur die ganze Zeile aufgelistet jedoch möchte ich nur das Wort/Textfragment haben.

Wenn diese Liste dann erstellt ist soll im zweiten Schritt ein neues Fragment vor jede Zeile in der Ergebnis Liste gesetzt werden. Bsp "Batch" - Dass ich hinterher eine Liste mit den Ausdrücken

BatchDatei=?1273
BatchDatei=?17345
BatchDatei=?523
BatchDatei=?10
...

habe. Ich hoffe das war einigermaßen verständlich; wäre dankbar wenn mir geholfen würde.

Gruß
lalaman
Mitglied: bastla
10.02.2008 um 17:08 Uhr
Hallo lalaman und willkommen im Forum!

Aufgrund Deiner Beschreibung bleiben noch Fragen offen:

- Stellt der Suchbegriff immer ein eigenes Wort dar, oder soll er auch als Wortbestandteil (zB in "BatchDatei=?1273") gefunden werden?
- Sollen nur solche Einträge gefunden werden, bei welchen nach dem Suchbegriff "Datei=?" ausschließlich "2 - 5 variierende Zahlen" (eher Ziffern) folgen, bzw stellt auch die Anzahl dieser Ziffern ein Kriterium dar (also: mehr oder weniger Ziffern wären nicht zulässig)?
- Welches Zeichen ist nach der letzten Ziffer zu erwarten: Leerzeichen, Satzzeichen, unbekannt?

Ein erster Ansatz, allerdings nicht in Batch, sondern in VBScript, könnte jedenfalls so aussehen:
01.
Const Liste = "D:\Liste.txt" 
02.
Const Ergeb = "D:\Ergebnis.txt" 
03.
Const Muster = "Datei=\?\d+" 
04.
Const Prefix = "Batch" 
05.
 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
Inhalt = fso.OpenTextFile(Liste, 1).ReadAll 
08.
 
09.
Set regAusdr = New RegExp	' Erstellt einen regulären Ausdruck. 
10.
regAusdr.Pattern = Muster	' Setzt das Muster. 
11.
regAusdr.IgnoreCase = True	' Unterscheidet nicht zwischen Groß- und Kleinschreibung 
12.
regAusdr.Global = True		' Sucht alle Vorkommen 
13.
 
14.
Set Uebereinstimmungen = regAusdr.Execute(Inhalt)	' Führt die Suche aus. 
15.
For Each Uebereinstimmung in Uebereinstimmungen		' Durchläuft die Übereinstimmungen. 
16.
	Ergebnis = Ergebnis & Prefix & Uebereinstimmung.Value & vbCRLF 
17.
Next 
18.
 
19.
fso.CreateTextFile(Ergeb, True).Write Ergebnis
Speichere das Script zb unter "C:\Scripts\FindeTextUndErstelleListe.vbs". Falls Du den Windows-Editor verwendest, musst Du entweder vor dem Speichen den Dateityp auf "Alle Dateien" setzen oder den Dateinamen unter Anführungszeichen eingeben, da ansonsten der Typ ".txt" angehängt wird.

Das Script kannst Du per Doppelklick oder aus einem Batch mit
01.
cscript //nologo "C:\Scripts\FindeTextUndErstelleListe.vbs"
starten.

Gefunden werden alle Vorkommen von "Datei=?#", wobei # für mindestens eine Ziffer steht (Anzahl ansonsten egal) und der Suchbegriff nicht auch als Wortbestandteil gefunden wird.

Grüße
bastla
Bitte warten ..
Mitglied: lalaman
10.02.2008 um 17:08 Uhr
Ok den ersten Teil hab ich jetzt schon selbst gelöst...Brauch jetzt nur noch einen Tip für eine Batch die bei X-beliebigen Zeilen einer TXT einen bestimmten Ausdruck vor jede Zeile einer bereits vorhandenen Liste setzt...also wie im ersten Post mit der zweiten Liste angegeben.
Wäre sehr dankbar wenn jemand eine Möglichkeit wüsste

Gruß

Edit...: Huch sorry hatte den Post von bastla gar nicht bemerkt...mal öfter die F5 Taste drücken könnte helfen.
Bitte warten ..
Mitglied: bastla
10.02.2008 um 17:15 Uhr
Hallo lalaman!

Ok den ersten Teil hab ich jetzt schon selbst gelöst
Magst Du Deine Lösung vorstellen?

bei X-beliebigen Zeilen einer TXT einen bestimmten Ausdruck vor jede Zeile einer bereits vorhandenen Liste ...
... bekommst Du etwa so:
01.
@echo off & setlocal 
02.
set "Liste=D:\Liste.txt" 
03.
set "Prefix=Batch" 
04.
 
05.
set "Bak=%Liste%.bak" 
06.
 
07.
move "%Liste%" "%Bak%" 
08.
for /f "usebackq delims=" %%i in ("%Bak%") do echo %Prefix%%%i>>"%Liste%"
Die Originaldatei wird als Sicherungskopie unter "Originalname.bak" gespeichert und die neue Version erhält den Namen der Originaldatei.

Grüße
bastla

P.S.:
hatte den Post von bastla gar nicht bemerkt.
Stand ja auch schon ewig lange (seit 17:08:25 Uhr) dort ...
Bitte warten ..
Mitglied: lalaman
10.02.2008 um 17:39 Uhr
Also zu den offenen Fragen:

Der Ausdruck stellt kein eigenes Wort dar; er ist in fließenden Text integriert.
Noch ein Bsp.

XYZhgkhlk"Datei=?12335"XYZtvbnvbnvbnext
XYZtexsdfsd"Datei=?87238"XYfghfghfgxttext<>
XYZtasdsxt<>"Datei=?45"Xegfghtexttwewert>
XYZ<xc<yx<>"Datei=?847"YZtsadxssdxt<

Dieser Teil: "Datei=?" ist immer gleich und dahinter befinden sich bis zu 5 Ziffern, die eben variieren. Meinetwegen alle möglichen Zahlen von 1 bis 99999.
Der Ausdruck den ich suche ist immer in "" gesetzt allerdings sind auch noch andere Begriffe in "" gesetzt, also könnte das als alleiniges Suchkriterium nicht genutzt werden.

Ich möchte in meiner Liste (TXT) hinterher haben:

Datei=?12335
Datei=?87238
Datei=?45
Datei=?847

Man müsste also einen Suchlauf nach suche:

"Datei=?....."
"Datei=?...."
"Datei=?..."
"Datei=?.."
"Datei=?."

starten, wobei die Punkte für beliebige Zahlen (oder Ziffern) stehen.
Ich habe inzwischen ein Programm gefunden (TextSTAT) womit ich die Textteile mehr oder weniger komfortabel Filtern kann somit wäre dieser erste Teil, wenn er als Script zu viel Aufwand bedeuten würde, nicht mehr unbedingt wichtig.

Viel mehr fehlt mir noch Teil 2, wofür ich bis jetzt keine Lösung gefunden hab:

aus meiner Liste als TXT in der nichts anderes drinsteht als diese Ausdrücke:

Datei=?12335
Datei=?87238
Datei=?45
Datei=?847

automatisch jeweils an den Anfang jeder Zeile einen weiteren Ausdruck (ohne Leertaste dazwischen) einzuschieben und daraus dann eine solche Liste werden zu lassen:

BatchDatei=?12335
BatchDatei=?87238
BatchDatei=?45
BatchDatei=?847

ps vielen danke für die freundliche Begrüßung hier im Board. Für Batch Probleme schon immer meine absolute lieblingsseite. Aber wie gesagt hierzu hab ich nichts gefunden.

Gruß
lalaman
Bitte warten ..
Mitglied: bastla
10.02.2008 um 17:45 Uhr
Hallo lalaman!

Der Ausdruck stellt kein eigenes Wort dar; er ist in fließenden Text integriert.
Ich passe die VBS-Version oben entsprechend an.

Zu Teil 2 hatte ich auch schon eine Idee ...

Grüße
bastla
Bitte warten ..
Mitglied: lalaman
10.02.2008 um 17:52 Uhr
Super...der zweite Teil hat funktioniert! Genau so wie ich mir das gedacht hatte.

Lösung vorstellen ist wohl ein klein wenig übertrieben. Ich gebe zu die Benutzung eines Tools ist diesbezüglich weniger spannend oder kreativ, aber dafür reichen meine Kenntnisse leider nicht aus.
Da es eine relativ große Textmasse ist die ich filtern möchte, auf jeden fall eine Erleichterung...wenn deine vbs-Lösung jetzt natürlich noch funktionieren sollte wär ich hin und weg

Ich bin im Übrigen immer wieder positiv überrascht über den schnellen Support, den man hier bekommt; auch in anderen Threads ist zumeist 1 Stunde später spätestens eine Lösung da

P.S.
Wie du schon richtig bemerkt hast bin ich neu (-angemeldet) hier und habe schon des Öfteren von dem "grünen häkchen" bei "erledigt" gelesen...wo aktiviere ich den denn? Vermutlich seh ich den Wald vor lauter Bäumen nicht ;)
Bitte warten ..
Mitglied: bastla
10.02.2008 um 18:01 Uhr
Hallo lalaman!

Sehr lobenswert, dass Du daran gedacht hast: http://www.administrator.de/index.php?faq=32

Noch eine Anmerkung zum VBScript: Wenn Du
01.
Const Muster = "Datei=\?\d{1,5}"
verwendest, werden nur genau 1 bis 5 Ziffern gefunden.

Grüße
bastla
Bitte warten ..
Mitglied: lalaman
10.02.2008 um 18:24 Uhr
Klappt super mit der vbs, nur noch mal eine Frage wegen den Sonderzeichen in dem Zusammenhang. Ich könnte diesen Suchlauf auch für andere Ausdrücke ganz gut gebrauchen. Wie müsste es z.B. bei

Datei.php?id=1-5 Ziffern


aussehen?


Const Muster = "Datei.php\?\id=d{1,5}"

funktioniert leider nicht.

Vielen Dank schon-/nochmal für die super Hilfe!!!

Gruß
Bitte warten ..
Mitglied: bastla
10.02.2008 um 18:37 Uhr
Hallo lalaman!

Da der Punkt eine besondere Bedeutung hat, musst Du auch diesen "maskieren":
01.
Const Muster = "Datei\.php\?id=\d{1,5}"
Mit "\d" wird eine Ziffer beschrieben - insoferne war noch eine weitere kleine Korektur erforderlich.

Eine Übersicht über die möglichen Suchmuster findest Du hier.

Grüße
bastla
Bitte warten ..
Mitglied: lalaman
10.02.2008 um 18:58 Uhr
Jetzt ist es perfekt. Vielen Dank nochmal
Bitte warten ..
Neuester Wissensbeitrag
Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (22)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (19)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...