Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
964to968
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
964to968
964to968
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

bestimmten Text aus mehreren Textdateien in Tabell

bestimmten Text aus mehreren Textdateien in Tabell
09.04.2008 21:55:30
Gregor
Hallo,
ich möchte Textdateien in einem Ordner auslesen und in eine Exceltabelle schreiben.
Die Textdateien sind alle gleich aufgebaut.
Nun möchte ich je aus der ersten Zeile den Wert zwischen "<!-- " und " -->" in einer Spalte untereinander haben.
Wenn in Text1.txt in Zeile1 steht <!-- ABC -->
und in Text2.txt in Zeile1 steht <!-- DEF -->
Dann soll in der Tabelle in Spalte A
ABC
DEF
und das möchte ich dann noch mit Zeile2 in SpalteB
...
Ich habe diesen Code gefunden, der mir zwar alle Textdateien ausliest aber den vollständigen Text in eine Spalte schreibt,
kann dieser Code nach meinen Bedürfnissen angepasst werden?

Sub einlesen()
Dim fso As Object
Dim fo As Object
Dim f As Object
Dim lng As Long
Dim text1 As String
Dim pf$
'Workbooks.Add
pf = BrowseForFolder(0, "Pfad für die Textdateien wählen ..")
If pf = vbNullString Then Exit Sub
Set fso = CreateObject("Scripting.FileSystemObject")
Set fo = fso.GetFolder(pf)
For Each f In fo.Files
Open f.Path For Input As #1
Do While Not EOF(1)
Line Input #1, text1
lng = lng + 1
Cells(lng, 1) = text1
Loop
Close #1
Next 'f
End Sub


Geht da was ?
Gregor

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: bestimmten Text aus mehreren Textdateien in Tabell
10.04.2008 06:55:00
Wuxinese
Hallo,
leider hat das mit dem Posten vom Code aus irgendeinem Grund nicht geklappt, aber ich hab den jetzt als .txt gezippt. So koennte es gehen.
https://www.herber.de/bbs/user/51400.zip
Gruss
Rainer

AW: bestimmten Text aus mehreren Textdateien in Ta
10.04.2008 08:39:59
Renee
Hi Gregor,
Zwischen dem Post 1 und dem sog. Code in Post 2 sind Widersprüche:
In Post 1 ist von mehreren Textdateien und insb. von Text1.txt und Text2.txt die Rede.
Möchtest du beide Dateien gleichzeitig auslesen ? und abwechslungsweise Datensätze schreiben ?
Post 2... mit Zeile2 in SpalteB ... soll jede 2te Zeile abwechslungsweise in Spalte B ?
D.h. ungerade Zeilen in abwechslungsweise in Spalte A, gerade Zeilen abwechslungsweise in Spalte B ?
Was passiert, wenn 1 Datei länger ist als die andere ?
GreetZ Renée

Anzeige
AW: bestimmten Text aus mehreren Textdateien in Ta
10.04.2008 09:03:00
Wuxinese
Oh, hab ich da was falsch verstanden?
Kurz mein Gedanke:
Wenn Du den Code von mir (for each...) anstelle von Deiner for each... Schleife einfuegst, dann wird der alle Textdateien im Verzeichnis oeffnen und die Zeile fuer Zeile abarbeiten. Dabei wird der Inhalt von Zeile 1 in Spalte A geschrieben, der Inhalt von Zeile 2 in Spalte B usw... Enthaelt eine Zeile nicht die von Dir angegebene Zeichen, zwischen denen der Inhalt steht, so bleibt die jeweilige Spalte in der Zeile fuer diese Datei leer.
Fuer die 2. Datei wird dann die 2. Zeile verwendet, fuer die 3. Datei die 3. Zeile usw usf.
Bei mir hat das Ganze auch gut funktioniert, allerdings bin ich mir jetzt nicht mehr sicher, ob ich Dich richtig verstanden habe.... - sollte es nicht so sein, wie Du das haben wolltest - nix fuer ungut!
Gruss
Rainer

Anzeige
jetzt ist das Durcheinander...
10.04.2008 09:06:00
Renee
perfekt, Rainer.
Irgendwie nahm ich an, das der erste und der 2te Post vom gleichen Absender stammt, was klar nicht der Fall ist. Darum vergesst meine Einwände.
GreetZ Renée

AW: bestimmten Text aus mehreren Textdateien in Ta
10.04.2008 09:06:00
Gregor
Hallo,
danke Rainer, mit deinem Code bekomme ich die benötigten Texte in Spalte A
wie bekomme ich nun noch die Texte aus Zeile 2 in Spalte B
und aus Zeile 3 in Spalte C ... bis ende Textdatei, oder bis Zeile 7, dass genügt mir.
Problem: die Bedingungen in den Zeilen der Textdateien sind nicht immer gleich,
in Zeile 2 suche zwischen "X" und "Y", in Zeile 3 suche zwischen "X1" und "Y1", ...
also muss für jede Zeile eine eigene Anfangs und Endbedingung festgelegt werden können.
@Renée
ich hoffe dass aus dieser Beschreibung mein Anliegen deutlicher geworden ist.
Es soll in Spalte A aus Zeile 1 zwischen "X0" und "Y0" aller Textdateien im Ordner A untereinander,
das funktioniert schon.
Nun noch das gleiche mit Zeile 2 zwischen "X" und "Y" in Spalte B, ...
Wenn eine Textdatei länger ist, als 7 Zeilen, dann könnte der gesamte Text aus Zeile 8 in Spalte H
aus Zeile 9 in Spalte I, ...
Wenn das nicht möglich ist, kann auch bei 7 ende sein.
Gregor

Anzeige
AW: bestimmten Text aus mehreren Textdateien in Ta
10.04.2008 09:24:00
Wuxinese
Hallo Gregor,
da wird das Ganze dann wirklich kompliziert... Du koenntest innerhalb des for each ... next und mit Hilfe der Variable j eine select... case Anweisung erstellen. (j steht dann fuer die jeweilige Zeile)
Select case j
case 1 - wie gehabt
case 2 - hier musst Du Dir dann mit Hilfe der len, instr, usw. die jeweiligen Bedingungen zurechtbasteln.
Je nachdem wieviele Zeilen Du hast wird das ein ganzes Stueck Arbeit. Es gibt da aber einige Loesungsmoeglichkeiten.
Gruss
Rainer

AW: bestimmten Text aus mehreren Textdateien in Ta
10.04.2008 09:57:00
gregor
Hallo Rainer,
j gibt doch die Spalte der Tabelle an, oder ?
Ich möchte aber bestimmte Zeilen im Text ansprechen.
Klar, wenn ich mit Select case j bestimme was in Spalte A und Splate B , ... soll
Aber wo muss ich Select Case ansetzen ?
Sorry aber meine VBA Kenntnisse sind bescheiden.

Sub einlesen()
Dim fso As Object
Dim fo As Object
Dim f As Object
Dim lng As Long
Dim pf$
pf = BrowseForFolder(0, "Pfad für die Textdateien wählen ..")
If pf = vbNullString Then Exit Sub
Set fso = CreateObject("Scripting.FileSystemObject")
Set fo = fso.GetFolder(pf)
Dim readtext, readtext2, readtext3 As String
Dim i, j As Long
Close #1
i = 1
j = 1
For Each f In fo.Files
If Right(f.Name, 4) = ".txt" Then
Open f.Path For Input As #1
Do While Not EOF(1)
Line Input #1, readtext
If InStr(1, readtext, "") = 0 Or InStr(1, readtext, ">") = Null Then GoTo   _
NichtGefunden
readtext2 = Right(readtext, Len(readtext) - (InStr(1, readtext, "") - 1)
Tabelle5.Cells(i, j) = readtext3
NichtGefunden:
j = j + 1
Loop
Close #1
i = i + 1
j = 1
End If
Next
End Sub


Gregor

Anzeige
AW: bestimmten Text aus mehreren Textdateien in Ta
10.04.2008 10:20:50
Wuxinese
Hallo Gregor,
das ist jetzt nicht getestet, aber es sollte funktionieren. Natuerlich kannst Du noch viele weitere Cases dazufuegen. Es gaeb auch eine elegantere Variante, bei der man nicht so viel schreiben braucht, vielleicht kann ich das auch noch schnell machen. Fuers erste sollte aber das gehen.
https://www.herber.de/bbs/user/51406.txt
Gruss
Rainer

AW: bestimmten Text aus mehreren Textdateien in Ta
10.04.2008 11:27:44
gregor
Super, Danke Rainer,
da komme ich schon mit klar.
Ich möchte jetzt nur noch eine weitere Spalte einschieben,
es soll nähmlich aus Zeile 3 des textes weiter gesucht werden
und die zweite Bedingung in eine weitere Spalte.
Das habe ich hin bekommen :D

Case 3
If InStr(1, readtext, "position") = Null Or InStr(1, readtext, "position") = 0 Or _
InStr(1, readtext, ">") = 0 Or InStr(1, readtext, ">") = Null Then GoTo  _
NichtGefunden
readtext2 = Right(readtext, Len(readtext) - (InStr(1, readtext, "position") + 9) _
)
readtext3 = Left(readtext2, InStr(1, readtext2, ">") - 2)
Tabelle5.Cells(i, j) = readtext3
j = j + 1
If InStr(1, readtext, ">") = Null Or InStr(1, readtext, ">") = 0 Or _
InStr(1, readtext, "")))
readtext3 = Left(readtext2, InStr(1, readtext2, "


Anzeige
AW: bestimmten Text aus mehreren Textdateien in Tabell
10.04.2008 11:38:00
gregor
Hallo,
Danke Rainer für deine Hilfe.
Ich gebe hier noch meinen kompletten Code an,
damit andere Anwender, die das gleiche Anliegen haben,
diesen für sich nutzen können.

Option Explicit
Private Type BrowseInfo
hwndOwner As Long
pIDLRoot As Long
pszDisplayName As Long
lpszTitle As Long
ulFlags As Long
lpfnCallback As Long
lParam As Long
iImage As Long
End Type
Private Const BIF_RETURNONLYFSDIRS = 1
Private Const MAX_PATH = 1000
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String,  _
ByVal lpString2 As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal  _
lpBuffer As String) As Long
Sub einlesen()
Dim fso As Object
Dim fo As Object
Dim f As Object
Dim lng As Long
Dim pf$
pf = BrowseForFolder(0, "Pfad für die Textdateien wählen ..")
If pf = vbNullString Then Exit Sub
Set fso = CreateObject("Scripting.FileSystemObject")
Set fo = fso.GetFolder(pf)
Dim readtext, readtext2, readtext3 As String
Dim i, j As Long
Close #1
j = 1
i = 1
For Each f In fo.Files
If Right(f.Name, 4) = ".txt" Then
Open f.Path For Input As #1
j = 1
Do While Not EOF(1)
Line Input #1, readtext
Select Case j
Case 1
If InStr(1, readtext, ""&lt!-- ") = Null Or InStr(1, readtext, ""&lt!-- ") = 0 Or _
InStr(1, readtext, " -->") = 0 Or InStr(1, readtext, " -->") = Null Then GoTo  _
NichtGefunden
readtext2 = Right(readtext, Len(readtext) - (InStr(1, readtext, "&lt!-- ") + 4)) _
readtext3 = Left(readtext2, InStr(1, readtext2, " -->") - 1)
Tabelle5.Cells(i, j) = readtext3
Case 2
If InStr(1, readtext, "id") = Null Or InStr(1, readtext, "id") = 0 Or _
InStr(1, readtext, ">") = 0 Or InStr(1, readtext, ">") = Null Then GoTo  _
NichtGefunden
readtext2 = Right(readtext, Len(readtext) - (InStr(1, readtext, "id") + 3))
readtext3 = Left(readtext2, InStr(1, readtext2, ">") - 2)
Tabelle5.Cells(i, j) = readtext3
Case 3
If InStr(1, readtext, "position") = Null Or InStr(1, readtext, "position") = 0 Or _
InStr(1, readtext, ">") = 0 Or InStr(1, readtext, ">") = Null Then GoTo  _
NichtGefunden
readtext2 = Right(readtext, Len(readtext) - (InStr(1, readtext, "position") + 9) _
)
readtext3 = Left(readtext2, InStr(1, readtext2, ">") - 2)
Tabelle5.Cells(i, j) = readtext3
j = j + 1
If InStr(1, readtext, ">") = Null Or InStr(1, readtext, ">") = 0 Or _
InStr(1, readtext, "")))
readtext3 = Left(readtext2, InStr(1, readtext2, "") = Null Or InStr(1, readtext, ">") = 0 Or _
InStr(1, readtext, "")))
readtext3 = Left(readtext2, InStr(1, readtext2, "") = Null Or InStr(1, readtext, ">") = 0 Or _
InStr(1, readtext, "")))
readtext3 = Left(readtext2, InStr(1, readtext2, "") = Null Or InStr(1, readtext, ">") = 0 Or _
InStr(1, readtext, "")))
readtext3 = Left(readtext2, InStr(1, readtext2, "


Gregor

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige