Autor
|
Thema: txt Datei einlesen und array bilden (614 mal gelesen)
|
CADwiesel Ehrenmitglied CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 12. Sep. 2018 10:01 <-- editieren / zitieren --> Unities abgeben:
Hi Vorweg gleich mal: ich habe eigentlich recht wenig Ahnung von dem VBA Zeugs. Muss mich da aber ab und an mal durchwursteln. Ich versuche gerade eine textdatei einzulesen und die Werte in ein Array zu schreiben. Bekomms aber nicht hin. Hier mein Ansatz Code: Sub testus() Dim MeinArray() As Variant Dim i As Long, j As Integer, tmpOpen "Teileliste.txt" For Input As #1 n = 20 While Not EOF(1) Line Input #1, Z a = Split(Z, Chr(9)) 'das Array neu definieren - ist sicher nicht richtig ReDim MeinArray(0 To UBound(a), 0 To 6) For i = 0 To UBound(a) tt = a(i) 'Textwert 'Anführungszeichen rausschmeissen ttt = Replace(tt, """", "") 'hier sollte das Array mit dem wert aus Zeile/Spalte und Wert gefüllt werden MeinArray(i, 0) = CDbl(ttt(0)) For j = 2 To 6 MeinArray(i, j) = ttt(j + 2) Next 'damit wird der Wert in excel eingetragen - wird aber nicht gebraucht 'Cells(n, i + 1) = ttt Next n = n + 1 Wend Close #1 End Sub
Ich will im späteren Verlauf auf die Daten zugreifen und Vergleiche mit einer schon bestehenden Exceldatei durchführen.
------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 778 Registriert: 18.05.2005 SolidWorks 2020 x64 SP3.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 21H1 Microsoft Office 365 ProPlus Microsoft Visual Studio Enterprise 2022
|
erstellt am: 12. Sep. 2018 12:11 <-- editieren / zitieren --> Unities abgeben: Nur für CADwiesel
Hallo CADwiesel Ich habe vor Jahren etwas ähnliches für unsere Stücklisten gemacht. Damals habe ich es mit einen benutzerdefinierten Datentyp gelöst.
Code: Option ExplicitPublic Type Teileliste Kennzeichen As Integer Originalkategorie As String Originalfamilie As String Originaltyp As String Material As String Laenge As Double Hoehe As Double Dicke As Double Flaeche As Double Volumen As Double End Type Public Daten() As Teileliste Public Sub einlesen(file As String) Dim maxZeilen As Integer Dim Zeilen() As String Dim Index As Integer Dim AnzTitelZeilen As Integer 'Anzahl der Titelzeilen AnzTitelZeilen = 3 'Einlesen der Zeilenitionen aus der txt-Datei Open file For Input As #1 Index = 0 While Not EOF(1) ReDim Preserve Zeilen(Index) Line Input #1, Zeilen(Index) maxZeilen = (Index) Index = Index + 1 Wend Close 1# Index = AnzTitelZeilen Dim txtZeile() As String 'Aufteilen der Zeilenitionen While Index <= maxZeilen txtZeile = Split(Zeilen(Index), Chr(9)) ReDim Preserve Daten(Index - AnzTitelZeilen) 'Zuweisen der Werte Daten(Index - AnzTitelZeilen).Kennzeichen = Int(Replace(txtZeile(0), """", "")) Daten(Index - AnzTitelZeilen).Originalkategorie = Replace(txtZeile(1), """", "") Daten(Index - AnzTitelZeilen).Originalfamilie = Replace(txtZeile(2), """", "") Daten(Index - AnzTitelZeilen).Originaltyp = Replace(txtZeile(3), """", "") Daten(Index - AnzTitelZeilen).Material = Replace(txtZeile(4), """", "") Daten(Index - AnzTitelZeilen).Laenge = Val(Replace(txtZeile(5), """", "")) Daten(Index - AnzTitelZeilen).Hoehe = Val(Replace(txtZeile(6), """", "")) Daten(Index - AnzTitelZeilen).Dicke = Val(Replace(txtZeile(7), """", "")) Daten(Index - AnzTitelZeilen).Flaeche = Val(Replace(txtZeile(8), """", "")) Daten(Index - AnzTitelZeilen).Volumen = Val(Replace(txtZeile(9), """", "")) Index = Index + 1 Wend End Sub Sub main() einlesen "C:\temp\Teileliste.txt" ' Pfad zu txt-Datei Stop 'Makro anhalten um die Variable "Daten" im Lokal-Fenster zu überprüfen End Sub
Gruss Andreas ------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Ehrenmitglied CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 12. Sep. 2018 12:29 <-- editieren / zitieren --> Unities abgeben:
|
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 13. Sep. 2018 01:39 <-- editieren / zitieren --> Unities abgeben: Nur für CADwiesel
Hallo CadWiesel, Hab Deinen Code mal ein wenig modifiziert auch wenn die Lösung von HenryV mit dem Typ-Array für feste Definitionen sicherlich die bessere Lösung ist Code:
Sub testus() Dim MeinArray() As Variant Dim i As Long, j As Integer, tmp Dim Zeile As Integer, ZWert As Integer, maxZ As LongZeile = 0: ZWert = 0 : maxZ = 0 ' Test Anzahl Zeilen da bei Preserve nur die letzte Dimension geändert werden kann Open "Teileliste.txt" For Input As #1 While Not EOF(1) Line Input #1, Z maxZ = maxZ + 1 Wend Close #1 ' Einlesen der Werte ins Array und Excel Open "Teileliste.txt" For Input As #1 n = 20 While Not EOF(1) Line Input #1, Z Zeile = Zeile + 1 If Zeile = 1 Then GoTo Skip ' Kopfzeile unwichtig und hat im Beispiel auch nur 9 statt 10 Spalten a = Split(Z, Chr(9)) ZWert = ZWert + 1 ' das Array neu definieren - ist sicher nicht richtig ' ReDim MeinArray(0 To UBound(a), 0 To 6) ' hier hat Preserve gefehlt damit die eingelesenen Werte nicht gelöscht werden ' außerdem darf nur die letzte Dimension geändert werden ' Zeilenmäßig aufbauen ReDim Preserve MeinArray(maxZ, 0 To UBound(a)) For i = 0 To UBound(a) MeinArray(ZWert, i) = Replace(a(i), Chr(34), "") ' Feld ergänzen und Hochkomma entfernen ' Wert in excel eingetragen - wird aber nicht gebraucht Cells(n, i + 1) = MeinArray(ZWert, i) Next i n = n + 1 Skip: Wend Close #1 End Sub
Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|