Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  txt Datei einlesen und array bilden

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   txt Datei einlesen und array bilden (450 mal gelesen)
CADwiesel
Ehrenmitglied
CAD4FM UG



Sehen Sie sich das Profil von CADwiesel an!   Senden Sie eine Private Message an CADwiesel  Schreiben Sie einen Gästebucheintrag für CADwiesel

Beiträge: 1911
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 12. Sep. 2018 10:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Teileliste.txt

 
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, tmp

Open "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


Sehen Sie sich das Profil von HenryV an!   Senden Sie eine Private Message an HenryV  Schreiben Sie einen Gästebucheintrag für HenryV

Beiträge: 696
Registriert: 18.05.2005

SolidWorks 2018 x64 SP4.0
Dell T3600 Workstation
Intel XENON 6x3.2 GHz
NVIDIA Quadro 4000 2 GB
16GB RAM
2x Dell U2412M, 24" TFT
Windows 7 Professional x64 SP1
Microsoft Office Pro 2010 SP2
Kaspersky Anti-Virus 10.2.4.674
Microsoft VB 2010 Express
SpacePilot von 3Dconnexion

erstellt am: 12. Sep. 2018 12:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CADwiesel 10 Unities + Antwort hilfreich

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 Explicit

Public 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



Sehen Sie sich das Profil von CADwiesel an!   Senden Sie eine Private Message an CADwiesel  Schreiben Sie einen Gästebucheintrag für CADwiesel

Beiträge: 1911
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 12. Sep. 2018 12:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ziemlich cool.
Vielen Dank damit komm ich weiter

------------------
Gruß
CADwiesel
Besucht uns im CHAT

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2162
Registriert: 02.05.2006

Office 2010
Visual Basic

erstellt am: 13. Sep. 2018 01:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für CADwiesel 10 Unities + Antwort hilfreich

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 Long

Zeile = 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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2020 CAD.de | Impressum | Datenschutz