TXT-File in Excel importieren mit einigen Gimmiks

Tobi_1

Newbie
Registriert
Mai 2015
Beiträge
3
Hallo in die Runde,

ich bin noch ein ziemlicher Neuling in der VBA-Programmierung.

Ich habe folgendes Problem.

Ich soll aus sehr vielen .txt.-Files bestimmte Werte auslesen. (Stehen immer in den selben Zeilen und diese Zeilen sin unter den ersten 30 im txt-File)
Diese Werte (4Stück) sollen dann in eine excel Tabelle eingefügt werden (Z.b. in A1 der wert aus 1.txt und dann in A2 aus 2.txt) quasi eine Prüfung, wenn A1 belegt, den Wert in A2 schreiben.
Diese Werte stehen dann nebeneinander in der Tabelle und bei jedem Einlesen einer neuen txt wird geprüft ob die Zeile belegt ist und die Werte werden in die nächste Zeile eingelesen.

Bin bisher erst soweit, dass ich die ersten 30 Zeile einlese und jetzt komme ich nichtmehr weiter.

Vielleicht kann mir ja jemand helfen

Vg Tobi
 
Danke,

die Version ist schonmal bisschen besser als meine ;)
Habe jedoch das Problem, dass die Werte die ich auslesen will, immer in der gleichen Zeile stehen, aber nicht immer exakt auf der selben Position(absolut gesehen ab Anfang der File) aber immer an der gleichen Position in der Zeile. Kann man die
inStr auch von einer Zeile aus "zählen" lassen?

Sub test()
Dim myFile As String, text As String, textline As String, posLat As Integer, posLong As Integer
myFile = Application.GetOpenFilename()
Open myFile For Input As #1
Do Until EOF(1)
Line Input #1, textline
text = text & textline
Loop
Close #1
posLat = InStr(text, "latitude")
posLong = InStr(text, "longitude")
Range("A1").Value = Mid(text, posLat + 933, 50)
'Range("A2").Value = Mid(text, posLong + 933, 5)
End Sub
Ergänzung ()

Ah hab meinen Fehler gefunden,

jetzt müsste ich noch reinbasteln, dass A1 nur beschrieben wird, wenn die Zelle leer ist, ansonsten kommt der Wert eine Zeile tiefer.
Das kann doch ned so komplex sein!? in C würde ich das einfach über eine Schleife machen, aber in VB fehlen mir die Basics total
 
So, vielen Dank, soweit funktioniert jetzt alles.

2 Sachen hätte ich aber noch die ich nicht auf die Reihe bekomme.
Zum einen hätte ich die jetzige Funktion (eine txt einlesen) erweitert auf:
- Folder auswählen in dem meine .txt stehen und jetzt alle files in diesem Ordner einlesen (auch in Unterordner falls vorhanden)
- Die werte die ich jetzt einlese werden super eingelesen, doch hab ich das Problem, dass die länge der eingelesenen Daten unterschiedlich ist und ich somit teilweise zu viele stellen einlese die ich nicht brauchen kann.

Kann mir jemand weiterhelfen?

Danke Tobi
Ergänzung ()

Und das mit dem Errorhandler klappt auch nicht so wie es soll, ich bin halt kein Programmierer :D
 
Mehrere Orderschichten abgrasen? Da hatte ich doch was…
Code:
Sub FindetIrfan()
Dim FSO As Object
Dim Laufwerk As Object
Const LW As String = "CDKS"
Dim L As Byte
Dim M As Byte
Dim LWName As String * 1
Dim ProgOrdner As String
Dim IrfanOrdner As String
Dim ProgANW As Variant
 ProgANW = Array("", "Progra*", "ANW*")
 ProgOrdner = ""
 IrfanOrdner = ""
 Flagge = False
 For L = 1 To Len(LW)
  LWName = Mid(LW, L)
  If Dir(LWName & ":\nul", vbDirectory) <> "" Then
   For M = 1 To UBound(ProgANW)
    ProgOrdner = ErkundeIrfan(LWName, "", CStr(ProgANW(M)))
    If ProgOrdner <> "" Then
     Flagge = True
     Exit For
    End If
   Next M
   If ProgOrdner <> "" Then
    IrfanOrdner = ErkundeIrfan(LWName, ProgOrdner, "Irfan*")
    If IrfanOrdner <> "" Then Exit For
   End If
  End If 'LW xeistiert
 Next
 If IrfanOrdner <> "" Then _
  Debug.Print LWName & ":\" & ProgOrdner & "\" & IrfanOrdner
End Sub
Function ErkundeIrfan(LW As String, OrdnerEbene1 As String, OrdnerEbene2 As String) As String
Dim FSO As Object
Dim Ordner As Object
 Set FSO = CreateObject("Scripting.FileSystemObject")
 For Each Ordner In FSO.GetFolder(LW & ":\" & OrdnerEbene1).SubFolders
  If UCase(Ordner.Name) Like UCase(OrdnerEbene2) Then
   ErkundeIrfan = Ordner.Name
   Exit Function
  End If
 Next
End Function
Spannend ist die Function, was die Kaskafierung von Ordner angeht. Der obere Teil mit dem Array sollte auf unterschiedlichen Systemen im Hause Prgramme-Order wie ‹Programme›, ‹Program Files›, ‹Programmer› (Dänisch) und meine ‹ANW› (wie ANWendungen) abklappen um nicht komplette Laufwerke (C, D, K und S) durchforsten zu müssen.

Gegen die Länge der eingelesene Daten kannst du nix machen, wat kütt dat kütt.
Sofern das nur Leerzeichen sind mag der Befehl TRIM(Stringvaiable) helfen. Kennst du feste Spalten greifen natürlich LEFT, RIGHT und selbstverfreilich MID. Versuche mit einfachem INPUT statt LINE INPUT dürften nicht so erfolgreich ausgehen, würde ich schätzen.

CN8
 
Zurück
Oben