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

eine Textdatei durchsuchen und Suchergebnisse verändert in eine weitere Textdatei ausgeben

Frage Entwicklung Batch & Shell

Mitglied: pArAdOxOn

pArAdOxOn (Level 1) - Jetzt verbinden

15.06.2007, aktualisiert 21.06.2007, 6364 Aufrufe, 8 Kommentare

Soh folgendes , ich muss aus einer Datei eine bestimmte Zeichenfolge filtern, und diese abgeändert in eine 2. Datei schreiben. Ich bin schon soweit , das ich ich das mit dem filtern im Griff hab. Wurde von mir so realisiert :

findstr /i /c "\<T11.*" 1.txt > ausgabe.txt
findstr /i /c "\<T=.*" 1.txt >> ausgabe.txt


so weit so gut, nun kommt der schwierige Teil und zwar können die ergebnisse entweder so T="1132001" oder so T1132001 in der zu durchsuchenden Datei enthalten sein . Das ganze muss noch vereinheitlicht werden, das alles eben so aussieht T="1132001" .

k.A. was ich mir überlegt hatte, war das man die suchergebnisse in Variablen zerlegt und dann wieder dementsprechend ausgibt falls dies möglich ist ??
Mitglied: Biber
16.06.2007 um 00:12 Uhr
Moin pArAdOxOn,

willkommen im Forum.

Na, dann solltest Du uns bitte noch verraten,
  • was denn nun noch in den Zeilen der ausgabe.txt steht/stehen kann
  • und was denn nun erhalten bleiben soll in der "endgültigen" Ergebnisdatei

Wenn in der Origanaldatei Zeilen stehen mit
- entweder dem String "T11nnnn"
- oder eventuell dem String "T="11nnn"

Dann erwischt Du alle Zeilen IMHO eher so:
findstr "T11 T=\"11" 1.txt

In der Ausgabedatei kannst Du dann alle Zeilen jeweils in eine Variable kopieren und dann innerhalt dieser Zeile ersetzen.
01.
.... 
02.
For /f "delims=" %%i in (ausgabe.txt) do  call :processLine "%%i" 
03.
goto eof: 
04.
:Processline 
05.
Set "thisline=%~1" 
06.
...(hier fehlt mir die Info, was von den alten zeilen erhalten bleiben soll)
Gruß
Biber
Bitte warten ..
Mitglied: bastla
16.06.2007 um 00:22 Uhr
Hallo pArAdOxOn!

Nach Deinem Beispiel oben müsste es etwa so gehen:
01.
@echo off & setlocal 
02.
del Ergebnis.txt 2>nul 
03.
for /f "delims=" %%i in (ausgabe.txt) do set "Zeile=%%i" & call :ProcessLine 
04.
goto :eof 
05.
:ProcessLine 
06.
echo %Zeile%|findstr "=">>Ergebnis.txt && goto :eof 
07.
echo %Zeile:~0,1%="%Zeile:~1%">>Ergebnis.txt
@Biber
Nach den interessanten Erlebnissen neulich mit ";" und Anführungszeichen beim Übergeben von Texten an Unterprogramme versuche ich es mal mit der Variablenzuweisung gleich in der "for"-Zeile - was hältst Du davon?

Grüße
bastla
Bitte warten ..
Mitglied: pArAdOxOn
16.06.2007 um 00:23 Uhr
ich brauch halt die nummern ausgegeben in dem format hier T="nummer"
Bitte warten ..
Mitglied: Biber
16.06.2007 um 00:35 Uhr
@bastla
Variablenzuweisung gleich in der "for"-Zeile - was hältst Du davon?
Eigentlich halte ich es für schlechter lesbar so.
Aber nach diesem exotischen Fall neulich... hmm...
...könnte ich mir ja versuchen anzugewöhnen.

Schlechter lesbar finde ich es trotzdem, weil diese FOR ...IN DO...-Zeilen bei mir manchmal ohnehin schon so lang sind, dass ich die Feinheiten nach dem DO nicht immer im Auge behalten kann.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
16.06.2007 um 00:50 Uhr
@Biber

... manchmal ohnehin schon so lang sind ...
In der Hinsicht tue ich mir vergleichsweise leicht (vermutlich, weil mit Old-School-Basic "aufgewachsen" und daher ein umstandsloses "goto" / "gosub" gewöhnt) - bei meinen Schleifen gibt's meist nach dem "do" nicht viel mehr als ein "call" ...

Grüße
bastla
Bitte warten ..
Mitglied: pArAdOxOn
21.06.2007 um 01:44 Uhr
öhm das ganze funktioniert schon fast einwandfrei, ich hab blos noch ein kleines problem und zwar wird text der mit in der Zeile steht mit gefiltert, das ganze schaut dann so aus :

T="1132001 Bla Bla"
T="1132002 D1 M6"
T="1132003 "
T="1132004"
T="1132006 Bla "
T="1132008"
T="1132012"
T="1132014"
T="1132015"
T="1132016"
T="1132017"
T="1132018"
T="1132019"
T="1132021"
T="1132022"
T="1132020"

das hier war der gefilterte text :

T1132001 Bla Bla
T1132002 D1 M6
T1132003
T1132004
dsfsdf T1132005
T1132006 Bla
wefrwrf T1132007
T1132008
n5 T="1132009"
n1 T1132010
n2 T1132011
bla bla bla
bla bla bla
T1132012
n4 T1132013
bla bla bla
T1132014
T1132015
bla bla bla
T1132016
T1132017
T1132018
T1132019
T="1132020"
T1132021
T1132022
T1132023

ich hab mich schon dran versucht bin aber nicht weiter gekommen, bin am verzweifeln so sollte es im Optimalfall aussehen :

T="1132001"
T="1132002"
T="1132003 "
T="1132004"
T="1132006"
T="1132008"
T="1132012"
T="1132014"
T="1132015"
T="1132016"
T="1132017"
T="1132018"
T="1132019"
T="1132021"
T="1132022"
T="1132020"

und das sind die batchdateien:
Step1.bat
findstr /x /i /r "\<T11.*" 1.txt >> ausgabe.txt

findstr /x /i /r "\<T=.*" 1.txt >> ausgabe.txt


Step2.bat
@echo off & setlocal
del Ergebnis.txt 2>nul
for /f "delims=" %%i in (ausgabe.txt) do set "Zeile=%%i" & call :ProcessLine
goto :eof
:ProcessLine
echo %Zeile%|findstr "=">>Ergebnis.txt && goto :eof
echo %Zeile:~0,1%="%Zeile:~1%">>Ergebnis.txt

da wird bestimmt noch was zu machen sein
Bitte warten ..
Mitglied: bastla
21.06.2007 um 07:51 Uhr
Hallo pArAdOxOn!

Falls das, was Du "gefilterten" Text nennst, der Inhalt von "Ausgabe.txt" sein sollte, dann ergibt sich ein wesentlicher Unterschied zu Deiner Beschreibung von oben: Die "T"-Werte stehen nicht immer am Anfang - ist das so? Auf keinen Fall dürften aber Zeilen wie "bla bla bla" enthalten sein ...
Um die Inhalte des ersten Beispiels auf zB T="1132001" zu beschränken, müsste es genügen, die folgende Zeile ersatzweise in die Batchdatei zu schreiben:
01.
for /f "delims= " %%i in (ausgabe.txt) do set "Zeile=%%i" & call :ProcessLine
Die Veränderung zur vorigen Version besteht in der Leerstelle nach "delims=".

Grüße
bastla
Bitte warten ..
Mitglied: bastla
21.06.2007 um 10:23 Uhr
... oder versuch es gleich mit dem folgenden VBScript:
01.
'Filtern.vbs 
02.
Const Suffix = "-bearbeitet" 
03.
If WScript.Arguments.Count = 0 Then 
04.
    WScript.Echo "Keine Datei angegeben!" 
05.
    WScript.Quit 
06.
End If 
07.
Set fso = CreateObject("Scripting.FileSystemObject") 
08.
EinDatei = WScript.Arguments(0) 
09.
If Not fso.FileExists(EinDatei) Then 
10.
    WScript.Echo "Angegebene Datei '" & EinDatei & "' nicht gefunden!" 
11.
    WScript.Quit 
12.
End If 
13.
AusDatei = Left(EinDatei, InStrRev(EinDatei, ".") - 1) & Suffix & _ 
14.
    Mid(EinDatei, InStrRev(EinDatei, ".")) 
15.
Zeilen = Split(fso.OpenTextFile(EinDatei, 1).ReadAll, vbCrLF) 
16.
Set Aus = fso.OpenTextFile(AusDatei, 2, True) 
17.
For i = 0 To UBound(Zeilen) 
18.
    Teile = Split(Zeilen(i), " ") 
19.
    TWert = "" 
20.
    For j = 0 To UBound(Teile) 
21.
        If Left(Teile(j), 1) = "T" Then 
22.
            TWert = Teile(j) 
23.
            Exit For 
24.
        End If 
25.
    Next 
26.
    If Left(TWert, 3) = "T=""" Then 
27.
	If Right(TWert, 1) = """" Then  
28.
            Aus.WriteLine TWert 
29.
        Else 
30.
            Aus.WriteLine TWert & """" 
31.
        End If 
32.
    ElseIf Left(TWert, 2) = "T=" Then 
33.
        Aus.WriteLine "T=""" & Mid(TWert, 3) & """" 
34.
    ElseIf Left(TWert, 1) = "T" Then 
35.
        Aus.WriteLine "T=""" & Mid(TWert, 2) & """" 
36.
    End If 
37.
Next 
38.
Aus.Close
Du kannst entweder die zu filternde Datei per Drag And Drop auf die Script-Datei ziehen, oder, wenn das Script zB in "C:\Scripts\Filtern.vbs" gespeichert wurde, dieses von der Kommandozeile oder aus einem Batch wie folgt starten:
01.
cscript //nologo "C:\Scripts\Filtern.vbs" "D:\Ausgangsdatei.txt"
Als Ergebnis erhältst Du eine "D:\Ausgangsdatei-bearbeitet.txt". Der Zusatz "-bearbeitet" wird in der 2. Zeile des Scripts festgelegt und kann natürlich auch geändert werden.

Arbeitsweise: Das Script sucht in jeder Zeile der übergebenen Datei nach dem ersten "T" und übernimmt dieses und alle weiteren Zeichen bis zum nächsten Leerzeichen oder bis zum Ende der Zeile (was eben früher kommt). Danach wird dieser "TWert" (wie gewünscht formatiert) in die Ausgabedatei geschrieben.

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
VB for Applications
Mehrere Spalten Durchsuchen und Ergebnisse in neuer Tabelle Ausgeben (3)

Frage von Mr.Green zum Thema VB for Applications ...

Batch & Shell
gelöst VBS Script in eine Textdatei ausgeben (VBS mit Batch zusammenführen) (5)

Frage von Luuke257 zum Thema Batch & Shell ...

Windows Server
gelöst Powershell array zeilenweise in Textdatei ausgeben (6)

Frage von Peter0816 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...