Microsoft Excel

Herbers Excel/VBA-Archiv

Einige Stellen aus TXT-File auslesen | Herbers Excel-Forum


Betrifft: Einige Stellen aus TXT-File auslesen von: Andre´
Geschrieben am: 24.11.2009 19:58:45

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

  

Betrifft: AW: Einige Stellen aus TXT-File auslesen von: Josef Ehrensberger
Geschrieben am: 24.11.2009 20:59:57

Hallo André,

probier mal.

https://www.herber.de/bbs/user/66141.xls


Gruß Sepp



  

Betrifft: AW: Einige Stellen aus TXT-File auslesen von: Andre´
Geschrieben am: 24.11.2009 21:40:28

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


  

Betrifft: AW: Einige Stellen aus TXT-File auslesen von: Josef Ehrensberger
Geschrieben am: 24.11.2009 21:52:31

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



  

Betrifft: AW: Einige Stellen aus TXT-File auslesen von: Andre´
Geschrieben am: 24.11.2009 22:20:14

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


  

Betrifft: AW: Einige Stellen aus TXT-File auslesen von: Uduuh
Geschrieben am: 24.11.2009 21:01:36

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



  

Betrifft: AW: Einige Stellen aus TXT-File auslesen von: Andre´
Geschrieben am: 24.11.2009 22:05:41

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


Beiträge aus den Excel-Beispielen zum Thema "Einige Stellen aus TXT-File auslesen"