Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1116to1120
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

Einige Stellen aus TXT-File auslesen

Einige Stellen aus TXT-File auslesen
Andre´
Hallo alle zusammen,
ich möchte einige Stellen aus einer TXT- Datei in ein Excelfile schreiben.
Dazu soll aus dem angehängten TXT-File (Das Orginal TXT-File hat ca.50000 Zeilen):
https://www.herber.de/bbs/user/66138.txt
das was sich hinter dem Suchkriterium:
Purchase Order, Item, Supplier, Unit Cost, Start Effective und End Effective befindet ausgelesen werden.
Nachfolgend der Output in Excel ohne die Zeile 7 (Zeile 7 zeigt die Stellen an die ausgelesen werden sollen)
Tabelle1

 ABCDEF
2Purchase OrderItemSupplierUnit CostStart EffectiveEnd Effective
311aaaaaa111 111 111      e11111111,913630.04.200528.02.2006
422aaaaaa222 222 222      e22222222,913627.05.200528.03.2006
533aaaaaa333 333 333      e33333333,913628.06.2005 
6      
7zwischen 18 bis 28zwischen 18 bis 36zwischen 18 bis 24zwischen 17 bis 47zwischen 62 bis 70zwischen 62 bis 70


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Die Suchkriterien tauchen in regelmäßigen Zeilenabstand erneut auf.
Der Zeilenabstand zwischen dem ersten Kriterium (Purchase Order) und dem letzten (End Effective) pro Item ist immer gleich.
Es kann auch passieren, dass nach dem Suchkriterium nicht steht wie es im Bsp.nach End Effective der Fall ist (Position 62 der Zeile 116) dann soll die Zelle leer bleiben.
Ich hoffe, mir kann jemand behilflich sein.
Vielen Dank im Voraus!
MFG Andre

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Einige Stellen aus TXT-File auslesen
24.11.2009 21:40:28
Andre´
Hallo Sep,
danke für Deine Hilfe.
Funktioniert noch nicht zu 100%, weil für die Item Spalte 18 Zeichen (momentan 11) und für die Supplier Spalte nur 6 Zeichen (momentan 13) eingelesen werden.
Erhalte für die erste Item: 111 111 111
anstatt: 111 111 111 e
Da das ganze auch in Excel 2007 funktionieren soll, dauert es natürlich recht lang,
bis alles zugeordnet wird.
Kannst Du mir bitte nochmals unter die Arme greifen.
MFG Andre
PS. versuche gerade den Code zu verstehen und teste natürlich selbst dahinter zu kommen
Anzeige
AW: Einige Stellen aus TXT-File auslesen
24.11.2009 21:52:31
Josef
Hallo André,
das ist kein Problem.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub importText()
  Dim strFile As String, varText As Variant, varInput As Variant
  Dim lngRow As Long, lngIndex As Long, intFF As Integer
  Dim strTmp As String, intPos As Integer
  
  strFile = Application.GetOpenFilename("Textdateien (*.txt),*.txt")
  
  If strFile = CStr(False) Then Exit Sub
  
  varText = Range("A1:F1")
  Range("A2:F" & Rows.Count) = ""
  Range("A2:F" & Rows.Count).NumberFormat = "General"
  varInput = Range("A2:F" & Rows.Count)
  
  intFF = FreeFile
  
  Open strFile For Input As #intFF
  Do While Not EOF(intFF)
    Line Input #intFF, strTmp
    For lngIndex = 1 To UBound(varText, 2)
      intPos = InStr(Application.Max(1, intPos), strTmp, varText(1, lngIndex))
      If intPos > 0 Then
        If lngIndex = 1 Then lngRow = lngRow + 1
        If varInput(lngRow, lngIndex) = "" Then
          varInput(lngRow, lngIndex) = Trim(Mid(strTmp, intPos + Len(varText(1, lngIndex)) + 1, IIf(lngIndex < 4, 30, 14)))
          If IsNumeric(varInput(lngRow, lngIndex)) Then
            varInput(lngRow, lngIndex) = varInput(lngRow, lngIndex) * 1
          ElseIf IsDate(varInput(lngRow, lngIndex)) Then
            varInput(lngRow, lngIndex) = CDate(varInput(lngRow, lngIndex))
          Else
            varInput(lngRow, lngIndex) = ReplaceMulti(varInput(lngRow, lngIndex), " ", " ")
          End If
        End If
      End If
    Next
  Loop
  Close #intFF
  
  Range("A2:F" & Rows.Count) = varInput
  Range("A1:F1").EntireColumn.AutoFit
End Sub

Private Function ReplaceMulti(ByVal Expression As String, ByVal Find As String, ByVal Repl As String) As String
  ReplaceMulti = Expression
  Do While InStr(1, ReplaceMulti, Find) > 0
    ReplaceMulti = Replace(ReplaceMulti, Find, Repl)
  Loop
End Function

Gruß Sepp

Anzeige
AW: Einige Stellen aus TXT-File auslesen
24.11.2009 22:20:14
Andre´
Hallo Sepp
Danke für Deine Überarbeitung.
Ich werde die Lösung von Udo bevorzugen, weil dieser Code schneller ist.
Nochmals Vielen DANK!
MFG Andre
AW: Einige Stellen aus TXT-File auslesen
24.11.2009 21:01:36
Uduuh
Hallo,
teste mal: Sub ttt() Dim sText As String, arrText, i As Long, lRow As Long Open "f:\66138.txt" For Input As #1 'anpassen sText = Input(LOF(1), 1) Close 1 arrText = Split(sText, vbLf) For i = 0 To UBound(arrText) If InStr(arrText(i), "Purchase Order:") > 0 Then lRow = lRow + 1 Cells(lRow, 1) = Mid(arrText(i), 18, 11) End If If Left(Trim(arrText(i)), 5) = "Item:" Then Cells(lRow, 2) = Mid(Trim(arrText(i)), 7, 19) End If If Left(Trim(arrText(i)), 9) = "Supplier:" Then Cells(lRow, 3) = Mid(Trim(arrText(i)), 11, 6) End If If Left(Trim(arrText(i)), 10) = "Unit Cost:" Then Cells(lRow, 4) = CDbl(Mid(Trim(arrText(i)), 12, 10)) End If If InStr(arrText(i), "Start Effective:") > 0 Then Cells(lRow, 5) = CDate(Mid(arrText(i), 62, 8)) End If If InStr(arrText(i), "End Effective:") > 0 Then If Len(Trim(Mid(arrText(i), 62, 8))) 8 Then Else Cells(lRow, 6) = CDate(Mid(arrText(i), 62, 8)) End If End If Next End Sub Gruß aus’m Pott
Udo

Anzeige
AW: Einige Stellen aus TXT-File auslesen
24.11.2009 22:05:41
Andre´
Hallo Udo,
auch Dir recht vielen Dank.
Mit Deinem Bsp. geht es auch in Excel 2007 meklich schneller.
Auch hier waren 19 Stellen in der Item- Spalte, dies habe ich aber selbst geändert.
Mein Problem ist hiermit gelöst.
Nochmals Vielen DANK an Sepp und Udo.
MFG Andre

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige