Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bestimmten String aus .txt in Excel

Bestimmten String aus .txt in Excel
Thomas
Hallo,
folgendes Problem:
ich lasse mit

Dim strFile   As Variant
strFile = Application.GetOpenFilename("SHI-Textdateien (*.shi), *.shi,SHO-Textdateien (*.sho), * _
_
.sho", MultiSelect:=True)

mehrere Dateien per Dialogfenster auswählen, deren Namen + Pfade dann an strFile übergeben werden.
Nun möchte ich diese Textdateien, die mit obigen Dialogfenster ausgewählt worden sind, auf _
einen String durchsuchen, und zwar:

[Zeitstempel]         : xx.xx.200x 04:53:00

Hier möchte ich das Datum und die Uhrzeit, also in diesem Fall xx.xx.200x 04:53:00 aus dieser .txt heraus haben und an eine bestimmte Stelle in einer .xls einfügen.
Dann zur nächsten ausgewählten Textdatei gehen, dort wieder nach dem String suchen, Datum raus, in Excel einfügen usw.
Nun meine Frage:
wie fange ich das an?
Bin um jeden Tipp/Beispielcode dankbar!

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Hier mal ein grober Code
07.10.2009 16:29:32
Worti
Hallo Thomas,
hier mal ein rudimänterer Code, der dir den ungefähren Ablauf gibt. Das Auslesen des Zeitstempel sowie den Fall, das keine Datei ausgewählt wurde, konnte ich in der kürze der Zeit nicht schaffen. wenn du noch Fragen hast: Heut abend schau ich noch mal rein.
Sub thomas()
Dim intI As Integer
Dim strFile   As Variant
Dim datenzeile As String
strFile = Application.GetOpenFilename("SHI-Textdateien (*.shi), *.shi,SHO-Textdateien (*. _
sho),  *.sho", _
MultiSelect:=True)
For intI = 1 To UBound(strFile)
Close #1
Open strFile(intI) For Input As #1
Do While Not EOF(1)           ' Auf Dateiende abfragen
Line Input #1, datenzeile  ' Datensatz lesen
If InStr(datenzeile, "[Zeitstempel]") > 0 Then
'Mach was mit dem Zeitwert'
End If
Loop
Next intI
Close #1
End Sub

Gruß Worti
Anzeige
geht es so?
07.10.2009 18:14:59
Tino
Hallo,
kannst ja mal testen.
Option Explicit
Function ReadData(strText)
Dim objRegEx As Object, objMatch As Object, objMatchCollection As Object
Dim varData As Variant
Dim i As Integer

    Set objRegEx = CreateObject("VBScript.RegExp")
    With objRegEx
        .MultiLine = True
        .Global = True
        .IgnoreCase = True
        .Pattern = "([Zeitstempel]:)*(\d{1,2}).(\d{1,2}).200(\d{1,2}) \d{1,2}:\d{1,2}:\d{1,2}"
        Set objMatch = .Execute(strText)
    End With
        
        For Each objMatch In objMatch
          varData = objMatch.Value
        Next objMatch
        
        If varData = "" Then
          varData = "nix"
        Else
          varData = Trim(Replace(varData, "[Zeitstempel]:", ""))
        End If
          
        If IsDate(varData) Then ReadData = CDate(varData)

End Function
Function TxT_ReadAll(ByVal sFilename As String) As String
Dim F As Integer
Dim sInhalt As String

    F = FreeFile
    Open sFilename For Binary As #F
    sInhalt = Space$(LOF(F))
    Get #F, , sInhalt
    Close #F
  
  TxT_ReadAll = sInhalt
End Function

Sub Beispiel_Test()
Dim strFile As Variant
Dim strText As String
Dim Daten() As Variant, varDate As Date
Dim A As Long, B As Long

strFile = Application.GetOpenFilename("SHI-Textdateien (*.shi), *.shi,SHO-Textdateien (*.sho), *.sho", MultiSelect:=True)


For A = Lbound(strFile) To Ubound(strFile)
    strText = TxT_ReadAll(strFile(A))
    varDate = ReadData(strText)
    
    If IsDate(varDate) Then
     B = B + 1
     Redim Preserve Daten(1 To B)
     Daten(B) = varDate
    End If

Next A

If B > 0 Then
 Range("A2").Resize(Ubound(Daten)) = Daten
End If

End Sub
Gruß Tino
Anzeige
AW: geht es so?
08.10.2009 07:46:45
Thomas
Hallo Tino,
funktioniert soweit ganz gut, nur, dass am Ende immer der selbe Zeitstempel ausgegeben wird ;-).
AW: Bestimmten String aus .txt in Excel
08.10.2009 08:05:45
Thomas
@Worti & Tino
Vielen Dank für eure Hilfe, klappt mitlerweile wie es soll.
@Tino
Konnte das Array aus irgendwelchen Gründen nicht komplett ausgeben, es kam immer nur der erste Wert in die Tabelle. Hab nun das Auslesen mit einer kleinen Schleife gelöst. Also nochmal vielen Dank.
ich habe vergessen
08.10.2009 14:46:23
Tino
Hallo,
das Array zu drehen.
Range("A2").Resize(UBound(Daten)) = Application.Transpose(Daten)
Gruß Tino

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige