goodbytes
Goto Top

Nach String in Textdatei suchen

Hallo!
Das klingt zwar einfach, ist aber leider noch nicht Alles.
Ich habe eine riesige Textdatei. Hier möchte ich Zeile für Zeile auslesen ob ein bestimmtes Wort auftaucht. Wenn ja soll die 6., 8. und 9. Zeile danach in eine neue Textdatei in eine einzige Zeile (z.B. durch Komma getrennt) ausgegeben werden.
So soll die Batch die gesamte Ausgangsdatei durchgehen bei jeder Fundstelle jeweils eine neue Zeile in die neue Datei ausgeben.
Ziel ist es, diese neu erzeugte Datei in Excel zu importieren zur Weiterverarbeitung (deshalb das Komma als Trennzeichen).
Die originale Datei kann ich nicht in Excel importieren (max. Zeilenanzahl rund 65000) und Excel 2007 hängt sich dabei auf.

Torsten

Content-Key: 62064

Url: https://administrator.de/contentid/62064

Printed on: April 19, 2024 at 03:04 o'clock

Member: Biber
Biber Jun 22, 2007 at 09:41:25 (UTC)
Goto Top
Moin TorstenB,

das hört sich ja noch nicht soooo komplex an.

Ähnliche Mimiken hatten wir schon mehrfach hier in Batch & Shell. Vorgehen:

  • mit Find.exe /N oder FindStr.exe /N die Zeilen mit dem Suchstring mit Zeilennummer ausgeben lassen. Wenn es viele sind, in eine Datei schreiben lassen.
  • zu den Zeilennumern in dieser Datei dann mit Set /a plus 6, plus 8 oder 9 berechnen.
  • diese drei Zeilen in eine Variable spreichern und rausschreiben.

Wenn Du vielleicht mal so 30 Testzeilen posten könntest..?

Grüße
Biber
Member: bastla
bastla Jun 22, 2007 at 11:30:36 (UTC)
Goto Top
Hallo TorstenB!

Bis Biber das Ganze perfektioniert, könntest Du ja einmal diesen Ansatz testen (was Dich nicht davon abhalten soll, auch einige Testdaten zu posten):
@echo off & setlocal
set "Daten=D:\Daten.txt"  
set "Suchbegriff=Wort"  
set "Ergebnis=D:\Ergebnis.txt"  
set "Nummeriert=%temp%\Nummeriert.txt"  
findstr /n . "%Daten%" > "%Nummeriert%"  
if exist "%Ergebnis%" del "%Ergebnis%"  
for /f "delims=" %%i in ('findstr /C:"%Suchbegriff%" "%Nummeriert%"') do call :ProcessLine "%%i"  
del "%Nummeriert%"  
goto :eof
:ProcessLine
set Zeile=
for /f "tokens=1* delims=:" %%a in ('echo %~1') do set "Zeile=%%b" & set /a ZNr=%%a  
for %%o in (6 8 9) do call :ProcessField %%o
(
echo %Zeile%
)>>"%Ergebnis%"  
goto :eof
:ProcessField
set /a SuchNr=%ZNr%+%1
for /f "tokens=2 delims=:" %%a in ('findstr /b "%SuchNr%:" "%Nummeriert%"') do set "Zeile=%Zeile%,%%a"  
Die "set"-Zeilen am Anfang sollten selbsterklärend sein ...

Grüße
bastla
Member: goodbytes
goodbytes Jun 22, 2007 at 16:01:43 (UTC)
Goto Top
Vielen Dank für die schnelle Antwort Biber & bastla !!! face-smile
bastla, deine Batch läuft so absolut perfekt über meine Datei !!!
Zwei kleine Probleme hab ich aber noch. Ist aber sicher nur `ne Kleinigkeit.
Erstes Problem: Die Zeile 6 enthält auch Leerzeichen, so dass nur der erste zusammenhängende Teil in die Zieldatei ausgegeben wird.
Zweites Problem: Ich hab festgestellt, dass ich nun doch auch noch Ausgaben von Zeilen im zweistelligen Bereich (26, 38 und 39) brauche.
Sobald ich das aber entsprechend verändere kommt nur noch Unsinn raus.

Torsten
Member: bastla
bastla Jun 22, 2007 at 16:12:40 (UTC)
Goto Top
Hallo TorstenB!

... kann ich beides mit meinen (angenommenen) Testdaten nicht nachvollziehen.

Wenn Du die Zeilenabstände in der "for %%o ..."-Zeile änderst (6 auf 26, etc) oder ergänzt (einfach durch Leerstellen getrennt hinzufügen), sollte das (falls genug Zeilen in der Ausgangsdatei vorhanden sind) eigentlich genügen.

Hatten wir Dich eigentlich schon um Testdaten gebeten? face-wink

Grüße
bastla

[Edit] In der "findstr..."-Zeile fehlte übrigens noch ein Anführungszeichen vor "%Nummeriert%" - ist schon oben nachgetragen. [/Edit]
Member: goodbytes
goodbytes Jun 22, 2007 at 16:34:02 (UTC)
Goto Top
Ach ja, sorry. Wollt ich eigentlich dranhängen.
Pin grad bloss in Panik... Unser Kleiner macht mächtig Theater.
Ich schicks dann.

Torsten
Member: goodbytes
goodbytes Jun 22, 2007 at 18:28:09 (UTC)
Goto Top
So, nun hab ich mal endlich wieder 5min Zeit ...

Hier nun ein kleiner Auszug aus der Datei:


15. Juni 2007

Seite
1

Neuer Energieliefervertrag
Alter Energieliefervertrag (Vor Update)
Fehler

Nr.
Verbrauchsstellennr.
ELV-Typ
Zõhlpunktnr.
Zõhlpunktbezeichnung
Beschreibung
G³ltig ab
G³ltig bis
17087

Strom


02.08.06
17087

Strom


02.08.06
Zõhlpunkt nicht angegeben!

Kundennr.


Verbraucher Kundennr.


(Abw. )

Vertragsnummer
17087
17087

Hõndler Rahmenvertragsnr.


Vertragslaufzeit
12
0

Vertragsverlõngerung
1
0

Vertragsk³ndigungfrist
1
0

Status
storniert
Storniert: Ja

Lieferart
Allgemeine Versorgung


Bilanzkreiscode
1
1

Lieferantencode
1
1

Netzbetreibercode
000777
000777

Regelzonenbetreibercode


Transportkunde


ÍVNB


RVNB


Marktgebiet


Zahler Netznutzung
Lieferant
Lieferant

Art der Versorgung
Volllieferung (offener Vertrag)
Volllieferung (offener Vertrag)

Ext. Kundennr. Vertragspartner


Ext. Kundennr. Dienstleister


Status Netznutzung
Direkter Vertrag
Direkter Vertrag

Ableseturnus
Dezember
Dezember

Entnahme Spannungsebenencode
Niederspannung (E06)
NS

Messung Spannungsebenencode
Niederspannung (E06)
NSP

Druckstufe Messung

Niederdruck

Nennwõrmeleistung
0,00
0,00

Netzreservekapazitõt (best.)
0,00
0,00

Netzanschlu?kapazitõt
0,00
0,00

Installierte Leistung
0,00
0,00

Gerõtewechsel
erlaubt
erlaubt

Druck ?bergabe
0,00


Bisherige Max. Leistung
0,00
0,00

Max. Leistung
0,00
0,00

Prognose
0,00


Prognose HT
600,00
600,00

Prognose NT
0,00
0,00

Standardlastprofilcode
H0
H0

Zõhlverfahren
SLP
SLP

Gasqualitõt

H-Gas

15. Juni 2007

Seite
2

Neuer Energieliefervertrag
Alter Energieliefervertrag (Vor Update)
Fehler

Nr.
Verbrauchsstellennr.
ELV-Typ
Zõhlpunktnr.
Zõhlpunktbezeichnung
Beschreibung
G³ltig ab
G³ltig bis
13390
67821
Strom
Z00733
DE1325662

01.08.01
01.08.01
13390
67821
Strom
Z00733


01.08.01
01.08.01
Verbraucherkunde <> Abw. Verbrauchserkunde 10503!

Kundennr.
11936
11936

Verbraucher Kundennr.


(Abw. 10503)

Vertragsnummer
13390
13390

Hõndler Rahmenvertragsnr.


Vertragslaufzeit
12
0

Vertragsverlõngerung
1
0

Vertragsk³ndigungfrist
1
0

Status
beendet
Storniert: Nein

Lieferart
Allgemeine Versorgung


Bilanzkreiscode
1
1

Lieferantencode
1
1

Netzbetreibercode
000777
000777

Regelzonenbetreibercode


Transportkunde


ÍVNB


RVNB


Marktgebiet


Zahler Netznutzung
Lieferant
Lieferant

Art der Versorgung
Volllieferung (offener Vertrag)
Volllieferung (offener Vertrag)

Ext. Kundennr. Vertragspartner


Ext. Kundennr. Dienstleister


Status Netznutzung
Direkter Vertrag
Direkter Vertrag

Ableseturnus
Dezember
Dezember

Entnahme Spannungsebenencode
Niederspannung (E06)
NS

Messung Spannungsebenencode
Niederspannung (E06)
NSP

Druckstufe Messung

Niederdruck

Nennwõrmeleistung
0,00
0,00

Netzreservekapazitõt (best.)
0,00
0,00

Netzanschlu?kapazitõt
0,00
0,00

Installierte Leistung
0,00
0,00

Gerõtewechsel
erlaubt
erlaubt

Druck ?bergabe
0,00


Bisherige Max. Leistung
0,00
0,00

Max. Leistung
0,00
0,00

Prognose
0,00


Prognose HT
0,00
0,00

Prognose NT
0,00
0,00

Standardlastprofilcode
H0
H0

Zõhlverfahren
SLP
SLP

Gasqualitõt

H-Gas



Torsten
Member: bastla
bastla Jun 22, 2007 at 18:35:51 (UTC)
Goto Top
Hallo TorstenB!

Was soll als Suchkriterium dienen, welche Zeilen werden benötigt?

Grüße
bastla

P.S.: Du könntest vielleicht noch < code> und < /code> (jeweils ohne Leerstellen) vor und hinter die Daten setzen.
Member: goodbytes
goodbytes Jun 22, 2007 at 18:46:54 (UTC)
Goto Top
Als Suchkriterium soll hier "Fehler" dienen.

            15. Juni 2007

            Seite
            1
             
            Neuer Energieliefervertrag
             Alter Energieliefervertrag (Vor Update)
             Fehler
             
                  Nr. 
                  Verbrauchsstellennr. 
                  ELV-Typ 
                  Zõhlpunktnr. 
                  Zõhlpunktbezeichnung 
                  Beschreibung 
                  G³ltig ab 
                  G³ltig bis 
                  17087 
                    
                  Strom 
                    
                    
                    
                    
                  02.08.06 
                  17087 
                    
                  Strom 
                    
                    
                    
                    
                  02.08.06 
            Zõhlpunkt nicht angegeben!

            Kundennr.
             
             

            Verbraucher Kundennr.
             
             
            (Abw. )

            Vertragsnummer
            17087
            17087

            Hõndler Rahmenvertragsnr.
             
             

            Vertragslaufzeit
            12
            0

            Vertragsverlõngerung
            1
            0

            Vertragsk³ndigungfrist
            1
            0

            Status
            storniert
            Storniert: Ja

            Lieferart
            Allgemeine Versorgung
             

            Bilanzkreiscode
            1
            1

            Lieferantencode
            1
            1

            Netzbetreibercode
            000777
            000777

            Regelzonenbetreibercode
             
             

            Transportkunde
             
             

            ÍVNB
             
             

            RVNB
             
             

            Marktgebiet
             
             

            Zahler Netznutzung
            Lieferant
            Lieferant

            Art der Versorgung
            Volllieferung (offener Vertrag)
            Volllieferung (offener Vertrag)

            Ext. Kundennr. Vertragspartner
             
             

            Ext. Kundennr. Dienstleister
             
             

            Status Netznutzung
            Direkter Vertrag
            Direkter Vertrag

            Ableseturnus
            Dezember
            Dezember

            Entnahme Spannungsebenencode
            Niederspannung (E06)
            NS

            Messung Spannungsebenencode
            Niederspannung (E06)
            NSP

            Druckstufe Messung
              
            Niederdruck

            Nennwõrmeleistung
            0,00
            0,00

            Netzreservekapazitõt (best.)
            0,00
            0,00

            Netzanschlu?kapazitõt
            0,00
            0,00

            Installierte Leistung
            0,00
            0,00

            Gerõtewechsel
            erlaubt
            erlaubt

            Druck ?bergabe
            0,00
             

            Bisherige Max. Leistung
            0,00
            0,00

            Max. Leistung
            0,00
            0,00

            Prognose
            0,00
             

            Prognose HT
            600,00
            600,00

            Prognose NT
            0,00
            0,00

            Standardlastprofilcode
            H0
            H0

            Zõhlverfahren
            SLP
            SLP

            Gasqualitõt
              
            H-Gas

            15. Juni 2007

            Seite
            2
             
            Neuer Energieliefervertrag
             Alter Energieliefervertrag (Vor Update)
             Fehler
             
                  Nr. 
                  Verbrauchsstellennr. 
                  ELV-Typ 
                  Zõhlpunktnr. 
                  Zõhlpunktbezeichnung 
                  Beschreibung 
                  G³ltig ab 
                  G³ltig bis 
                  13390 
                  67821 
                  Strom 
                  Z00733 
                  DE0007779989400000235012018001000 
                    
                  01.08.01 
                  01.08.01 
                  13390 
                  67821 
                  Strom 
                  Z00733 
                    
                    
                  01.08.01 
                  01.08.01 
            Verbraucherkunde <> Abw. Verbrauchserkunde 10503!

            Kundennr.
            11936
            11936

            Verbraucher Kundennr.
             
             
            (Abw. 10503)

            Vertragsnummer
            13390
            13390

            Hõndler Rahmenvertragsnr.
             
             

            Vertragslaufzeit
            12
            0

            Vertragsverlõngerung
            1
            0

            Vertragsk³ndigungfrist
            1
            0

            Status
            beendet
            Storniert: Nein

            Lieferart
            Allgemeine Versorgung
             

            Bilanzkreiscode
            1
            1

            Lieferantencode
            1
            1

            Netzbetreibercode
            000777
            000777

            Regelzonenbetreibercode
             
             

            Transportkunde
             
             

            ÍVNB
             
             

            RVNB
             
             

            Marktgebiet
             
             

            Zahler Netznutzung
            Lieferant
            Lieferant

            Art der Versorgung
            Volllieferung (offener Vertrag)
            Volllieferung (offener Vertrag)

            Ext. Kundennr. Vertragspartner
             
             

            Ext. Kundennr. Dienstleister
             
             

            Status Netznutzung
            Direkter Vertrag
            Direkter Vertrag

            Ableseturnus
            Dezember
            Dezember

            Entnahme Spannungsebenencode
            Niederspannung (E06)
            NS

            Messung Spannungsebenencode
            Niederspannung (E06)
            NSP

            Druckstufe Messung
              
            Niederdruck

            Nennwõrmeleistung
            0,00
            0,00

            Netzreservekapazitõt (best.)
            0,00
            0,00

            Netzanschlu?kapazitõt
            0,00
            0,00

            Installierte Leistung
            0,00
            0,00

            Gerõtewechsel
            erlaubt
            erlaubt

            Druck ?bergabe
            0,00
             

            Bisherige Max. Leistung
            0,00
            0,00

            Max. Leistung
            0,00
            0,00

            Prognose
            0,00
             

            Prognose HT
            0,00
            0,00

            Prognose NT
            0,00
            0,00

            Standardlastprofilcode
            H0
            H0

            Zõhlverfahren
            SLP
            SLP

            Gasqualitõt
              
            H-Gas

Jedes Auftauchen von "Fehler" soll quasi die Zeile 0 sein. Wenn "Fehler" gefunden wurde soll er dann die von mir benötigten nachvolgenden (Zeilen so wie beschrieben in eine extra Textdatei ausgeben.
Also deine Batch lief ja schon problemlos drüber; es gab nur die Probleme mit Leerzeichen bei einer Zeile, die die Batch ausgeben soll nachdem sie Fehler gefunden hatte ("Zõhlpunkt nicht angegeben!").
Mit den zweistelligen Zahlen als Problem das kann ich jetzt auch nicht mehr nachvollziehen. Wer weiss was da vorhin gesponnen hat. (Oder ich hab einen Tippfehler drin gehabt, den ich nicht gesehen habe.)

Torsten
Member: goodbytes
goodbytes Jun 22, 2007 at 19:01:51 (UTC)
Goto Top
Ach so, ich benötige in dieser Datei die Zeilen (nach Fehler, welche beim Finden Zeile "0" darstellt) 26, 38, 39.

Obwohl, wenn ich`s so aus der Original-Datei hier so reinkopiere stimmts eh nicht überein. Die originale Fehler-Datei Kann von der Software nur als HTML ausgespuckt werden. Eine weit mehr als 100MB große HTML-Datei kann man mit nix weiter bearbeiten, nur aus dem Browser als Text-Datei abspeichern. Dabei kommt so ein Müll raus (natürlich noch mit vielen Leerzeilen dazwischen). Deshalb stimmts nicht überein.

Torsten
Member: bastla
bastla Jun 22, 2007 at 19:21:20 (UTC)
Goto Top
Hallo TorstenB!

Problematisch für eine Batchverarbeitung sind die Zeilen mit "<>", also im Beispiel
            Verbraucherkunde <> Abw. Verbrauchserkunde 10503!
Ersetze bitte die letzte Zeile durch diese 4 Zeilen:
for /f "tokens=2 delims=:" %%a in ('findstr /b "%SuchNr%:" "%Nummeriert%"') do set "Feld=%%a"  
set "Feld=%Feld:<=^<%"  
set "Feld=%Feld:>=^>%"  
set "Zeile=%Zeile%,%Feld%"  
Falls die jeweils 12 Leerstellen in Deinen Daten nicht erst beim Posten entstanden, sondern bereits in der Ausgangsdatei enthalten sind, ersetze die (neue) letzte Zeile durch:
set "Zeile=%Zeile%,%Feld:~12%"  

Grüße
bastla
Member: goodbytes
goodbytes Jun 22, 2007 at 22:13:26 (UTC)
Goto Top
Also bastla, ich kann nur sagen -> echt top !!! face-smile
Kennst dich echt aus. Die Batch läuft super durch - ohne Probleme.

Tausend Dank nochmal !!! face-smile))

Torsten