Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Txt datei in mehrdimensionales array einlesen
Gehe zu Seite Zurück  1, 2
zurück: Sub aufruf mit Variabl - Rückgabewert weiter: .dbf Datei öffnen mit Makro Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Feedback Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
slowboarder
Im Profil kannst Du frei den Rang ändern


Verfasst am:
04. Aug 2011, 11:54
Rufname:

AW: Txt datei in mehrdimensionales array einlesen - AW: Txt datei in mehrdimensionales array einlesen

Nach oben
       Version: (keine Angabe möglich)

AH Ok,
hab jetzt auch deinen ersten Satz im ersten Beitrag gelesen.
Gruß, Daniel
Gast



Verfasst am:
04. Aug 2011, 13:28
Rufname:


AW: Txt datei in mehrdimensionales array einlesen - AW: Txt datei in mehrdimensionales array einlesen

Nach oben
       Version: (keine Angabe möglich)

hi,
ich muss euch leider noch einmal bemühen.
nach einigen testläufen musste ich feststellen, dass, entgegen meiner annahme, in den ersten beiden spalten eine 0 als nachkommastelle nicht aufgeführt wird.
das heißt, es kann vorkommen dass manche zeilen nur 6 oder 5 spalten umfassen, da alle nachfolgenden spalten aufrücken.

wenn es möglich ist die spalte mit ihrer relativen position zur letzten (5. oder 6.) spalte abzurufen, also in etwa: strArray (1) ("vorletzte Spalte") ist das kein problem.
wenn nicht, müsste irgendwie eine platzhalter spalte eigeführt werden, da wo die nachkommastelle fehlt.
die stellen vorm komma sind immer >9, was vl bei der selektion hilft.

man könnte auch die nachkommastellen vernachlässigen, in etwa:
wenn 8 spalten dann lösche spalte 2, wenn kleiner als 10
wenn spalte 3 >9 lösche spalte 4
das für jede zeile einmal durchlaufen lassen und bei gelöschten spalten aufrücken lassen, sodass ich am ende überall die gleiche anzahl an spalten habe.

mit kleiner 10 bzw größer 9 beziehe ich mich auf die ganzzahligen nachkommastellen, die ja von 1 bis 9 gehen, da als eigene spalte erkannt.

vielen dank schonmal, nehmt ihr euch wieder meines problemes an Smile

gruß
max
losgehts
Im Profil kannst Du frei den Rang ändern


Verfasst am:
04. Aug 2011, 13:51
Rufname:

AW: Txt datei in mehrdimensionales array einlesen - AW: Txt datei in mehrdimensionales array einlesen

Nach oben
       Version: (keine Angabe möglich)

Hallo Max,

und du bist sicher, dass du an der Quelle nichts machen kannst?
Das ist doch doof?!

Also, ich habe dich so verstanden, dass in den ersten beiden Spalten Zahlen vorkommen, die größergleich als 10 sind und eventuell eine Nachkommastelle haben.

Code:
Sub importII()
Dim aLines() As String           'Datenfeld mit den Zeilen
Dim MeinArray() As Variant       'nullbasiertes Datenfeld mit den Werten
Dim i As Long, j As Integer, tmp, k As Integer

'Dateiname der CsV:
   Const strDatNam As String = "C:\test.txt"

'Zeilenumbruch der CSV DAtei:
   Const strZeilenumbruch = vbCrLf 'vbLf vbCr evtl. anpassen

'CSV-Datei einlesen
   aLines = Split(ReadFile(strDatNam), strZeilenumbruch)

'Feld fuellen
   ReDim MeinArray(0 To UBound(aLines), 0 To 6)
   For i = 0 To UBound(aLines)
      tmp = Split(aLines(i), ",")
      k = 6
      j = UBound(tmp)
      Do While j >= 0
         If k = 1 Or k = 0 Then
            If Len(tmp(j)) > 1 Or j = 0 Then
               MeinArray(i, k) = tmp(j)
            Else
               MeinArray(i, k) = CDbl(tmp(j - 1) & "," & tmp(j))
               j = j - 1
            End If
         Else
            MeinArray(i, k) = tmp(j)
         End If
         k = k - 1
         j = j - 1
      Loop
   Next

'Ausgabe als Beispiel:
   Range("A1").Resize(UBound(MeinArray, 1) + 1, UBound(MeinArray, 2) + 1) = MeinArray

End Sub

Public Function ReadFile(ByVal strFileName As String) As String
'von bst: http://www.office-loesung.de/ftopic469292_0_0_asc.php#1963587
   Dim intHandle As Integer
   
   intHandle = FreeFile
   Open strFileName For Input As #intHandle
   ReadFile = Input(LOF(intHandle), #intHandle)
   Close #intHandle
End Function


klappt's?
Grüße, Ulrich

_________________
Ich freue mich über jede Art von Feedback
maxwelll
Gast


Verfasst am:
04. Aug 2011, 14:15
Rufname:

AW: Txt datei in mehrdimensionales array einlesen - AW: Txt datei in mehrdimensionales array einlesen

Nach oben
       Version: (keine Angabe möglich)

hey,
die quelle ist leider unumstößlich Smile

das wird echt komplizierter als ich dachte Smile.

die ausgabe
Range("A1").Resize(UBound(MeinArray, 1) + 1, UBound(MeinArray, 2) + 1) = MeinArray
bezieht sich auf excel, richtig? das läuft bei mir ja nicht, und spuckt deswegen nen fehler aus?
wenn ich versuche das array anzusprechen mit
MsgBox MeinArray(1)(1)
kommt: subscript out of range
maxwelll
Gast


Verfasst am:
04. Aug 2011, 14:26
Rufname:


AW: Txt datei in mehrdimensionales array einlesen - AW: Txt datei in mehrdimensionales array einlesen

Nach oben
       Version: (keine Angabe möglich)

nochmal , damits nicht missverstanden wird:

so können meine zeilen aussehen:

mit beiden nachkommastellen
4196,7,5622,2,1,1,1,Filter: 1,Slide Position 1

eine der beiden fällt raus:
4196,5622,2,1,1,1,Filter: 1,Slide Position 1 oder
4196,7,5622,1,1,1,Filter: 1,Slide Position 1

beide fallen raus:
4196,5622,1,1,1,Filter: 1,Slide Position 1

es würde reichen, wenn man aus den ersten drei fällen den letzten machen könnte.
die nachkommastellen liegen im nanometerbereich und der kann vernachlässigt werden, da der apperat ehr nicht so genau arbeitet (wie ich leider eben erst bemerkte, man will ja so genau wie möglich sein Razz).

gruß
max
slowboarder
Im Profil kannst Du frei den Rang ändern


Verfasst am:
04. Aug 2011, 14:43
Rufname:

AW: Txt datei in mehrdimensionales array einlesen - AW: Txt datei in mehrdimensionales array einlesen

Nach oben
       Version: (keine Angabe möglich)

Hi
da kannst du im Prinizip nur so vorgehen:

1. die Zeilen einzeln einlesen
2. mit der Split-Funktion die Zeile in ein ZwischenArray zerlegen mit dem Komma als Trennzeichen.
3. jetzt dieses Array mit Ubound(arr) auf die Anzahl der erzeugten Elemente prüfen.
bei 6 ist alles ok und du kannst das Zwischenarray per Schleife in das gesamt-Array schreiben, dhl alle Positionen von 0-6
hast du 8 als ergebnis, dann hatten beide Zahlen nachkommastellen und du musst die Positionen 0, 2, 4, 5, 6, 7, 8 ins Gesamtarray übernehmen
beim ergebnis 7 wirds natürlich schwieriger, weil dann noch irgenwie prüfen musst, ob jetzt die erste oder zweite Zahl die Nachkommastelle hatte.

Gruß, Daniel
losgehts
Im Profil kannst Du frei den Rang ändern


Verfasst am:
04. Aug 2011, 15:04
Rufname:

AW: Txt datei in mehrdimensionales array einlesen - AW: Txt datei in mehrdimensionales array einlesen

Nach oben
       Version: (keine Angabe möglich)

Hallo,

ja, die Excelausgabe ist für dich natürlich nicht brauchbar. Du musst die Zeile einfach löschen.

Im Prinzip macht der Code ja das, was Daniel beschrieben hat (halt ein bischen anders). Das Problem liegt sicherlich im Zeilenumbruch:
Code:
'Zeilenumbruch der CSV DAtei:
   Const strZeilenumbruch = vbCrLf 'vbLf vbCr evtl. anpassen

Versuch einmal vbLf anstatt vbCrLf:
Code:
'Zeilenumbruch der CSV DAtei:
   Const strZeilenumbruch = vbLf 'vbCrLf vbCr evtl. anpassen


klappt das?
Grüße, Ulrich

_________________
Ich freue mich über jede Art von Feedback
maxwelll
Gast


Verfasst am:
04. Aug 2011, 15:51
Rufname:

AW: Txt datei in mehrdimensionales array einlesen - AW: Txt datei in mehrdimensionales array einlesen

Nach oben
       Version: (keine Angabe möglich)

hi ulrich,
leider immernoch nicht.
hatte vbCr und vbLf auch schon getestet (steht ja mit dran Smile

so ganz blick ich da auch nicht durch, da reichen meine vba kenntnisse wohl nicht aus, aber warum wird aline nach zeilenumbrüchen gesplittet und nicht nach ","?

desweiteren liegt in deinem beispiel der dateipfad auf einer konstanten, ich hab allerdings eine variable, wo sich der user die richtige datei raussuchen kann.
das bekomme ich aber wohl auch noch alleine hin Smile

danke für deine bemühungen Smile
losgehts
Im Profil kannst Du frei den Rang ändern


Verfasst am:
04. Aug 2011, 16:23
Rufname:

AW: Txt datei in mehrdimensionales array einlesen - AW: Txt datei in mehrdimensionales array einlesen

Nach oben
       Version: (keine Angabe möglich)

Hm,

das kann ich so aus der Ferne jetzt auch nicht sagen, wiso das nicht will, da müsste ich einmal deine Datei haben. Bei meiner Testdatei klappt's.

Dann vielleicht einmal so:
Code:
Sub HauptMakro()
Dim DasArray As Variant
Dim strDateiname As String

'Dateiname
   strDateiname = "C:\test.txt"

'Makro aufrufen und Array fuellen lassen
   Import strDateiname, DasArray

'Ausgabe als Beispiel:
'   Range("A1").Resize(UBound(DasArray, 1) + 1, UBound(DasArray, 2) + 1) = DasArray
   MsgBox DasArray(0, 1)

End Sub


Sub Import(ByVal strDatNam As String, ByRef MeinArray As Variant)
Dim FF As Integer, i As Long, Zeile As String
Dim Tmp As Variant, j As Integer, k As Integer


'Zeilen zählen
   FF = FreeFile()
   Open strDatNam For Input As #FF
   Do Until EOF(FF) = True
      Line Input #FF, Zeile
      i = i + 1
   Loop
   Close #FF
   
'Feld fuellen
   ReDim MeinArray(0 To i - 1, 0 To 6)
   FF = FreeFile()
   i = 0
   Open strDatNam For Input As #FF
   Do Until EOF(FF) = True
      Line Input #FF, Zeile
      Tmp = Split(Zeile, ",")
      Select Case UBound(Tmp)
         Case 8
         
            j = 6
            k = 8
            Do While j >= 0 And k >= 0
               MeinArray(i, j) = Tmp(k)
               If k = 3 Or k = 1 Then
                  k = k - 1
                  MeinArray(i, j) = CDbl(Tmp(k) & "," & MeinArray(i, j))
               End If
               k = k - 1:  j = j - 1
            Loop
           
         Case 7
            j = 6
            k = 7
            Do While j >= 0 And k >= 0
               MeinArray(i, j) = Tmp(k)
               If k = 2 Or k = 1 Then
                  If Len(Tmp(k)) = 1 Then
                     k = k - 1
                     MeinArray(i, j) = CDbl(Tmp(k) & "," & MeinArray(i, j))
                  End If
               End If
               k = k - 1:  j = j - 1
            Loop
           
         Case 6
            For j = 0 To 6
               MeinArray(i, j) = Tmp(j)
            Next
           
         Case Else
            MsgBox "unerwartete Spaltenanzahl"
      End Select
      i = i + 1
   Loop
   Close #FF

End Sub


Ich habe dir das gleich so strukturiert, dass du das Import-Makro ausgelagert hast und vom Hauptmakro einfach aufrufst.

Das ist vielleicht auch weniger kompliziert zu lesen.
Grüße, Ulrich

_________________
Ich freue mich über jede Art von Feedback
maxwelll
Gast


Verfasst am:
04. Aug 2011, 16:33
Rufname:

AW: Txt datei in mehrdimensionales array einlesen - AW: Txt datei in mehrdimensionales array einlesen

Nach oben
       Version: (keine Angabe möglich)

hey ulrich,

wow ich bin beeindruckt Smile läuft einwandfrei, sortiert alles raus und nicht passt.
vielen dank dafür!

schönen abend noch Smile
max
maxwelll
Gast


Verfasst am:
04. Aug 2011, 16:46
Rufname:

AW: Txt datei in mehrdimensionales array einlesen - AW: Txt datei in mehrdimensionales array einlesen

Nach oben
       Version: (keine Angabe möglich)

kleiner nachtrag:
die erste variante hat wohl nicht funktioniert, da ich mit
MeinArray(1)(1)
aufgerufen habe .... wie das halt so ist.. Very Happy

machts gut
maxwelll
Gast


Verfasst am:
11. Aug 2011, 12:06
Rufname:


AW: Txt datei in mehrdimensionales array einlesen - AW: Txt datei in mehrdimensionales array einlesen

Nach oben
       Version: (keine Angabe möglich)

hi
hier noch was zu dem code, falls jmd ein ähnliches prob hat:
da ab und zu bis zu 3-stellige nachkommastellen auftauchen können, musste

Case 7
j = 6
k = 7
Do While j >= 0 And k >= 0
MeinArray(i, j) = Tmp(k)
If k = 2 Or k = 1 Then
If Len(Tmp(k)) <= 3 Then
k = k - 1
MeinArray(i, j) = CDbl(Tmp(k) & "," & MeinArray(i, j))
End If
End If
k = k - 1: j = j - 1
Loop

geändert werden.

tschöö
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Gehe zu Seite Zurück  1, 2
Diese Seite Freunden empfehlen

Seite 2 von 2
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Excel Formeln: ecxel datei funzt bei xp nicht mehr 3 arcos 1190 12. Jun 2007, 18:22
Klaus-Dieter ecxel datei funzt bei xp nicht mehr
Keine neuen Beiträge Excel Formeln: Excel Datei zu groß welche Möglichkeiten?? 1 Gast 2009 04. Jun 2007, 10:44
Alto Excel Datei zu groß welche Möglichkeiten??
Keine neuen Beiträge Excel Formeln: Existenz von Datei über Wenn-Formel prüfen ... 10 leihzahnrad 573 22. Mai 2007, 10:17
watta Existenz von Datei über Wenn-Formel prüfen ...
Keine neuen Beiträge Excel Formeln: Text Datei in Zelle einlesen 0 roman.platter 692 10. Apr 2007, 20:18
roman.platter Text Datei in Zelle einlesen
Keine neuen Beiträge Excel Formeln: Aus externer Datei das Datum und die Zeit auslesen 2 norics 1209 28. März 2007, 08:47
norics Aus externer Datei das Datum und die Zeit auslesen
Keine neuen Beiträge Excel Formeln: Mehrere Benutzer an einer Excel Datei arbeiten 3 der neue 3614 12. Jan 2007, 09:52
Gast Mehrere Benutzer an einer Excel Datei arbeiten
Keine neuen Beiträge Excel Formeln: Buchstabe in einer Zellkoordinate von anderen Zelle einlesen 2 benj 791 19. Dez 2006, 12:25
benj Buchstabe in einer Zellkoordinate von anderen Zelle einlesen
Keine neuen Beiträge Excel Formeln: Daten einer Excel Datei in andere übernehmen Excel 2002 SP3 4 DTox 2664 27. Okt 2006, 11:56
Gast Daten einer Excel Datei in andere übernehmen Excel 2002 SP3
Keine neuen Beiträge Excel Formeln: Inhalt aus Zelle in externe Datei auslagern 1 MavPic 1592 07. März 2006, 19:39
rainberg Inhalt aus Zelle in externe Datei auslagern
Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten. Excel Formeln: Zeile auslesen / einlesen (Externe Datei) 0 MavPic 1615 07. März 2006, 12:03
MavPic Zeile auslesen / einlesen (Externe Datei)
Keine neuen Beiträge Excel Formeln: Zellen-Import aus Word Datei 1 Heavyduty 802 15. Jan 2006, 20:32
Hübi Zellen-Import aus Word Datei
Keine neuen Beiträge Excel Formeln: SVERWEIS auf externe Datei mit variablen Blattnamen 6 Bia74 1517 04. Jul 2005, 19:28
fl618 SVERWEIS auf externe Datei mit variablen Blattnamen
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Access Tabellen