Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1720to1724
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bestimmte Wörter in .txt-Datei suchen und folgende Zeichenkette ausgeben

Bestimmte Wörter in .txt-Datei suchen und folgende Zeichenkette ausgeben
14.11.2019 11:29:01
Erdnusskrieger
Hallo Excel-Spezis,
ich habe folgendes Problem und hoffe auf eure Unterstützung!
Ich suche zusätzlich zu meinem bisherigen Code noch drei einzelne Wörter aus einem .txt-Dokument. Ich hab das Gefühl, dass ich den schweren Part bereits mit dem Forum hier gelöst habe, den leichten aber nicht programmiert bekomme. Und zwar brauche ich die Zeichenkette die hinter den Begriffen FGNR, Bau und Stelle steht.
Beispiele:
Zu Bau:
Bau_____:_A1CD (Unterstriche sind Leerzeichen!) (So schaut die Zeile in der .txt-datei aus)
Hier brauch ich quasi das A1CD (ist nur ein Beispiel, es ist möglich, dass die Zeichenkette in der Länge variabel ist, sprich es können auch nur 3 Zeichen oder sogar 5 sein). Bau kommt öfters in der Datei vor. Ich brauche aber nur die Zeichenkette (in dem Fall A1CD) wo es zum ersten mal im .txt-Dokument auftritt. Diese soll in die Sheets "Prüf" und "Bew" in die Zelle "I1" geschrieben werden.
Zu FGNR:
XX__ABCD_______blub_______FGNR_____________:_3O92J37 (Unterstriche sind Leerzeichen) (So schaut die Zeile in der .txt-datei aus)
Hier brauch ich quasi das 3O92J37(ist nur ein Beispiel, die Zeichenkette ist aber immer 7-stellig). FGNR kommt öfters in der Datei vor. Ich brauche aber nur die Zeichenkette (in diesem Fall 3O92J37) wo es zum ersten mal auftritt. Diese soll in die Sheets "Prüf" und "Bew" in die Zelle "I2" geschrieben werden.
Zu Stelle:
XX__ABCD_______Blub_______Stelle_____________:_A22A-22-22-222 (Unterstriche sind Leerzeichen)(So schaut die Zeile in der .txt-datei aus)
Hier brauch ich quasi das A22A-22-22-222 in diesem Fall(ist nur ein Beispiel, die Zeichenkette kann unterschiedlich lang sein). Stelle kommt nur einmal in der Datei vor. Diese soll in die Sheets "Prüf" und "Bew" in die Zelle "I3" geschrieben werden.
Ich habe bereits schon vieles probiert,jedoch komme ich nicht zum gewünschten Ergebnis. Dachte wenn ich quasi die Schleife einfach wiederhole, nur mit den neuen Variablen, sollte es funktionieren... hab ich falsch gedacht :) Dr. Google hab ich auch durchforstet, leider ohne Erfolg.. Könntest ihr mir hierbei noch behilflich sein?
So wie der bisherige Code ausschaut, soll er auch bleiben, denn ich habe bereits eine Suchabfrage nach SA's gestartet um andere Informationen die hintenanstehen zu finden. Mit Erfolg :)
Ich hoffe ich konnte mich verständlich ausdrücken.
Code sieht bisher folgendermaßen aus:

Sub Check_In_einlesen()
'Variablen definieren
Dim Quelldatei As String     'Speicherort der Textdatei
Dim Inhalt As String             'Inhalt der Textdatei
Dim Zeile As Integer            'Laufvariable
Dim sWord1 As String         'Wort nach dem gesucht werden soll
Dim sWord2 As String         'Wort nach dem gesucht werden soll
Dim sWord3 As String         'Wort nach dem gesucht werden soll
Dim sWord4 As String         'Wort nach dem gesucht werden soll
Dim AnzFound As Integer
Dim lngStelle1 As Long       'Stelle, an der das sWord1 gefunden wurde
Dim arSAs                            'Array für die SAs einer Zelle
AnzFound = 0
'Wörter nach denen gesucht werden soll
sWord1 = "SA's"
sWord2 = "FGNR"
sWord3 = "Bau"
sWord4 = "Stelle"
'Quelldatei ansprechen
Quelldatei = Application.GetOpenFilename("Textdateien (*.txt), *.txt")
'Tabellenblatt aktivieren
ThisWorkbook.Worksheets("SA-Konfiguration").Activate
'Quelldatei öffnen
Open Quelldatei For Input As #1
'SA-Codes in SA-Konfiguration eintragen
Do While Not EOF(1)           'Schleife bis Datenende
'Inhalt der Quelldatei zeilenweise einlesen
Line Input #1, Inhalt
lngStelle1 = InStr(1, Inhalt, sWord1)
If lngStelle1 > 0 Then
'Zeile mit Suchwort gefunden
AnzFound = AnzFound + 1
Sheets("SA-Konfiguration").Cells(AnzFound, 3) = Mid(Inhalt, 46) 'Nur die SA-Codes  _
ausgeben
arSAs = Split(Mid(Inhalt, lngStelle1 + 19), " ")
Sheets("SA-Konfiguration").Cells(AnzFound, 3).Resize(, UBound(arSAs) + 1) = arSAs    '  _
_
Nur die SA-Codes
End If
Loop
'Quelldatei schließen
Close #1
End Sub

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Link zum vorherigen Thread
14.11.2019 11:33:28
NoNet
Hallo Erdnusskrieger,
für Folgethreads ist es sinnvoll, den Link zum vorherigen Thread anzugeben :
https://www.herber.de/forum/messages/1722868.html
Ich hatte noch keine Gelegenheit und Muße, mich mit der Folgefrage zu beschäftigen - evtl. hat hier ein anderer Excel-Freund mehr Zeit !?!
Salut, NoNet

Hast Du Interesse, andere Excel-Begeisterte kennenzulernen ? - Dann komme zum

Exceltreffen 12.-14.06.2020 in Freiberg/Sachsen

http://www.exceltreffen.de/index.php?page=291


Anmeldungen sind noch bis 31.03.2020 möglich ! - Schau doch mal rein !

Anzeige
AW: Vorüberlegungen
14.11.2019 11:55:02
Fennek
Hallo,
bevor man sich für eine bestimmte Methode entscheidet, sollten die Rahmenbedingungen geklärt werden:
- wie groß ist/sind die Textdatei/en (zeilenweise zu lesen ist nur bei eher kleinen Dateien sinnvoll)
- wie oft kommen die Suchbegriffe vor (in fast jeder Zeile, sehr selten
- wie häufig wird der Code benötigt
Es gibt im CMD die Befehle "FIND" und "FINDSTR", die Textdateien sehr effizient durchsuchen können.
Textdateien können auch komplet auf einmal in den RAM eingelesen werden, Analysen werden dann viel schneller.
mfg
AW: Vorüberlegungen
14.11.2019 12:15:12
Erdnusskrieger
Hallo Fennek,
- .txt-Dateien haben schätzungsweise eine max. Größe von 2mb (max.20000 Zeilen)
- Bau kommt häufig vor (100-200x?), ich brauche aber nur die Zeichenkette hinterm 1. Bau. FGNR kommt weniger als 10x vor, ich brauche aber nur die Zeichenkette hinterm 1. FGNR. Stelle kommt 1x vor und ich brauche nur die Zeichenkette dahinter.
- Der Code wird häufig verwendet. Hintergrund ist der, dass ich viele .txt-dateien einlesen muss über zukünftig mehrere Monate/Jahre und mit den oben benötigten Informationen eine Excel befüllen muss. Deswegen möchte ich dies möglichst automatisiert über ein Klick auf ein Button (das Makro einer Schaltfläche zuweisen kriege ich mittlerweile hin ;)) realisieren. Dies würde mir eine Menge Zeit ersparen.
Viele Grüße
Anzeige
AW: CMD
14.11.2019 12:30:06
Fennek
Hallo,
unter diesen Umstände dürfte ein Ansatz im CMD besser sein.
Versuche Win-Taste+r: cmd
und dann: Find "FGNR" Dateiname
Dies kann im 2. Schritt gut automatisiert werden und vollständig aus VBA gesteuert werden.
Günstig wäre auch eine kleines Beispiel der Text-Datei (alle Beispiele kommen 2x vor, einige "Nieten") hochzuladen.
mfg
AW: CMD
14.11.2019 12:44:16
Erdnusskrieger
Das Programm soll schon über Excel ablaufen. Ist eine Vorgabe die ich bekommen habe.
Zumal das Programm hier noch nicht abgeschlossen ist.
In meinem bisherigen Code habe ich nämlich bereits mir sogenannte SA's (viele Zahlen-Buchstabenkombinationen) ausgelesen. Diese SA's werden weitere Zeilen zugeordnet, die ich letztendlich brauche.
Heißt, per Klick auf den 1. Button sollen mir meine Rahmendaten (Bau, Stelle, FGNR und SA's) aus einem .txt-Dokument ausgegeben werden und per Klick auf den 2. Button sollen mir die Zeilen auf Basis der Rahmendaten aus einem weiteren Excel-Sheet ausgegeben werden.
Das hat schon alles seine Gründe, weswegen ich dies alles mit Excel (VBA) machen muss.
Eine Text-Datei darf ich leider nicht hochladen (auch kein Ausschnitt hiervon), deswegen versuche ich es so schon bestmöglichst zu umschreiben, wie die Zeilen ausschauen.
Kannst du mir hierbei helfen?
Grüße
Anzeige
AW: eigenes Beispiel
14.11.2019 13:01:24
Fennek
Hallo,
aus deinem Beitrag habe ich die Beispiele in eine Txt-Datei kopiert. Dann geht dieser Code:

$Tx = get-content C:\Users\User\Desktop\Erdnuss.txt
$Tx | Select-String -Pattern 'Bau|FGNR|Stelle' -AllMatches > $null
foreach ($T in $Tx) {
if ($T.Contains('Bau')) {$it = 'Bau'}
if ($T.Contains('FGNR')) {$it = 'FGNR'}
if ($T.Contains('Stelle')) {$it = 'Stelle'}
$S = $T -split(':')
write-host ($it, $S[1])
}
VBA kann mit "CreateObject" alle COM-Programme starten, also sowohl CMD als auch Powershell. Außer einem kurzen Flackern des Bildschirms muss der User nichts davon mitbekommen. Die Werte werden dann in Excel importiert, in Zellen geschrieben uvm.
mfg
(Powershell-Code)
Anzeige
AW: Bestimmte Wörter in .txt-Datei suchen und folgende Zeichenkette ausgeben
16.11.2019 19:54:53
Piet
Hallo Erdnusskrieger
ich sehe gerade diesen Thread, darauf gab ich im anderen Thread bereits diese Antwort mit Lösung.
Würde mich freuen wenn es dir hilft dein VBA Problem dami zu lçsen.
hier der fehlende Code um die drei Texte "Bau", "Stelle" und "FGNR" auszuwerten. Wohin das Ergebnis der Variablen "Txt" dann geschrieben werden muss bitte selbst ergzenzen. Dim musst du noch um Txt as String und c as İnteger erweitern. Viel Spass beim testen ...
mfg Piet
Sub test()
Inhalt = Range("D1")
If InStr(Inhalt, "Bau ") Then
c = InStr(Inhalt, "Bau ")
Txt = Trim(Mid(Inhalt, InStr(c, Inhalt, ":") + 1, 100))
Txt = Trim(Left(Txt, InStr(Txt, " ")))
'Wohin laden?  Bitte selbst ergaenzen
End If
If InStr(Inhalt, "Stelle ") Then
c = InStr(Inhalt, "Stelle ")
Txt = Trim(Mid(Inhalt, InStr(c, Inhalt, ":") + 1, 100))
Txt = Trim(Left(Txt, InStr(Txt, " ")))
End If
If InStr(Inhalt, "FGNR") Then
c = InStr(Inhalt, "FGNR")
Txt = Trim(Mid(Inhalt, InStr(c, Inhalt, ":") + 1, 100))
Txt = Trim(Left(Txt, InStr(Txt, " ")))
End If
End Sub

Anzeige
AW: Bestimmte Wörter in .txt-Datei suchen und folgende Zeichenkette ausgeben
19.11.2019 11:35:09
Erdnusskrieger
Hallo Piet,
danke für deine Nachricht!
Leider hat dein Code bei mir nicht funktioniert, das Programm läuft durch, aber er schreibt die Daten nicht in die vorhergesehenen Zellen. Ich würde dir einfach mal den Quellcode hochladen wie er bisher ausschaut.
Eventuell findest du ja den Fehler.

Sub Check_In_einlesen()
'Variablen definieren
Dim Quelldatei As String        'Speicherort der Textdatei
Dim Inhalt As String            'Inhalt der Textdatei
'Dim Inhalt2 As String           'Inhalt der Textdatei
'Dim Inhalt3 As String           'Inhalt der Textdatei
'Dim Inhalt4 As String           'Inhalt der Textdatei
Dim sWord1 As String            'Wort nach dem gesucht werden soll
'Dim sWord2 As String            'Wort nach dem gesucht werden soll
'Dim sWord3 As String            'Wort nach dem gesucht werden soll
'Dim sWord4 As String            'Wort nach dem gesucht werden soll
Dim AnzFound As Integer
Dim lngStelle1 As Long          'Stelle, an der das sWord1 gefunden wurde
'Dim lngStelle2 As Long          'Stelle, an der das sWord1 gefunden wurde
'Dim lngStelle3 As Long          'Stelle, an der das sWord1 gefunden wurde
'Dim lngStelle4 As Long          'Stelle, an der das sWord1 gefunden wurde
Dim arSAs                       'Array für die SAs einer Zelle
Dim c As Integer
Dim Txt As String
AnzFound = 0
'Wörter nach denen gesucht werden soll
sWord1 = "SA's"
'sWord2 = "FGNR"
'sWord3 = "Bau"
'sWord4 = "Stelle"
'Quelldatei ansprechen
Quelldatei = Application.GetOpenFilename("Textdatei (*.txt), *.txt")
'Tabellenblatt aktivieren
ThisWorkbook.Worksheets("SA-Konfiguration").Activate
'Quelldatei öffnen
Open Quelldatei For Input As #1
'____________________________________________________________________________________________________________________
'SA-Codes in SA-Konfiguration eintragen
Do While Not EOF(1)           'Schleife bis Datenende
'Inhalt der Quelldatei zeilenweise einlesen
Line Input #1, Inhalt
lngStelle1 = InStr(1, Inhalt, sWord1)
If lngStelle1 > 0 Then
'Zeile mit Suchwort gefunden
AnzFound = AnzFound + 1
Sheets("SA-Konfiguration").Cells(AnzFound, 3) = Mid(Inhalt, 46) 'Nur die SA-Codes  _
ausgeben
arSAs = Split(Mid(Inhalt, lngStelle1 + 19), " ")
Sheets("SA-Konfiguration").Cells(AnzFound, 3).Resize(, UBound(arSAs) + 1) = arSAs    ' _
Nur die SA-Codes
End If
Loop
'Quelldatei schließen
Close #1
'______________________________________________________________________________________________________________________
'Quelldatei öffnen
Open Quelldatei For Input As #1
If InStr(Inhalt, "FGNR") Then
c = InStr(Inhalt, "FGNR")
Txt = Trim(Mid(Inhalt, InStr(c, Inhalt, ":") + 1, 100))
Txt = Trim(Left(Txt, InStr(Txt, " ")))
Sheets("Prüfanleitung").Range("I2").Value = Txt   'FGNR ausgeben in Prüfanleitung
Sheets("Bewertungsbogen").Range("I2").Value = Txt 'FGNR ausgeben in Bewertungsbogen
End If
'Quelldatei schließen
Close #1
'_______________________________________________________________________________________________________________________
'Quelldatei öffnen
Open Quelldatei For Input As #1
If InStr(Inhalt, "Bau ") Then
c = InStr(Inhalt, "Bau ")
Txt = Trim(Mid(Inhalt, InStr(c, Inhalt, ":") + 1, 100))
Txt = Trim(Left(Txt, InStr(Txt, " ")))
Sheets("Prüfanleitung").Range("I1").Value = Txt   'Bau ausgeben in Prüfanleitung
Sheets("Bewertungsbogen").Range("I1").Value = Txt 'Bau ausgeben in Bewertungsbogen
End If
'Quelldatei schließen
Close #1
'_______________________________________________________________________________________________________________________
'Quelldatei öffnen
Open Quelldatei For Input As #1
If InStr(Inhalt, "Stelle") Then
c = InStr(Inhalt, "Stelle")
Txt = Trim(Mid(Inhalt, InStr(c, Inhalt, ":") + 1, 100))
Txt = Trim(Left(Txt, InStr(Txt, " ")))
Sheets("Prüfanleitung").Range("I3").Value = Txt   'Stelle ausgeben in Prüfanleitung
Sheets("Bewertungsbogen").Range("I3").Value = Txt 'Stelle ausgeben in Bewertungsbogen
End If
'Quelldatei schließen
Close #1
'In Bewertungsbogen bleiben
Worksheets("Bewertungsbogen").Activate
End Sub

Anzeige

311 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige