VB6 *Daten ausgeben

Dark Ranger

Erfahrenes Mitglied
Hallo,
irgendwie scheint in meinem Programm ein Fehler zu stecken...die Datenausgabe erfolgt nicht so, wie sie eigentlich sein sollte.
Ich habe folgende Textdatei, die eingelesen werden soll:
Code:
 1	13	Berg
2	11	Berg
2	12	Tal 
2	56	Mitte
4	 9	Berg
1	12	Tal 
3	11	Berg
1	12	Mitte

In dieser Art sollten die Daten auch wieder in Debug.Print ausgegeben werden.
Bei mir sieht das allerdings so aus:
Code:
 0   0   
1   13  Berg
2   11  Berg
2   12  Tal
2   56  Mitte
4   9   Berg
1   12  Tal
3   11  Berg
1   12  Mitte
0   0

Ja, da habe ich schon so einiges ausprobiert und die Daten waren hinterher auch korrekt ausgegeben, aber dann sollen sie ja noch sortiert werden, wobei dass dann auch nicht klappte und im Moment sehen sie so aus:
Code:
 0   0   
0   0   
1   13  Berg
2   11  Berg
3   11  Berg
4   9   Berg
1   12  Mitte
2   56  Mitte
1   12  Tal
2   12  Tal

Und diese Nullen störe mich schon, denn die sollen garnicht dahin! Ich weiß wohl, dass es wohl an der Zuweisung meines Arrays liegt, aber einen Fehler entdecke ich nicht...bin auch nicht so wirklich fit in VB6. Habe allerdings auch schon einige Bekannte gefragt und die finden auch nix oder meinen, mein Code wäre soweit in Ordnung.

Wahrscheinlich sehr hilfreich, wenn ich mal meinen kompletten Code schicke:
Code:
Option Explicit


'Verbund der Messstationsdaten
Private Type TKoordinaten
    x As Double                                     'x-Koordinate
    y As Double                                     'y-Koordinate
End Type

Private Type TMessstationsdaten
    koord As TKoordinaten                           'Koordinaten
    station As String                               'Messstation
End Type

'Verbund der Messdaten
Private Type TMessdaten
    nummer As Byte                                  'Messnummer
    wert As Byte                                    'Messwert
    station As String                               'Messstation
End Type

Dim datenA() As TMessstationsdaten                  'ein Feld, deren Größe sich während der Programmdurchführung
                                                    'ändert, da beliebig viel Zeilen in der Textdatei
Dim datenB() As TMessdaten                          'zweite Feld

'Messdaten ausgeben
Private Sub MessdatenAusgeben_Click()
    Dim i As Integer
    Dim erg As String
    
    For i = LBound(datenB) To UBound(datenB)
        erg = erg & datenB(i).nummer & Chr(9) & datenB(i).wert & Chr(9) & datenB(i).station & vbNewLine
    Next i
        
    Debug.Print erg
End Sub

'Aufruf zum Messdaten Einlesen Vorgang
Private Sub MessdatenEinlesen_Click()
    Call EinlesenMessdaten("DateiDialog.FileName")
End Sub

'Messdaten laden
Private Sub MessdatenLaden_Click()
    'Fehlerbehandlung definieren
    DateiDialog.CancelError = True                  'Abbrechen des Dialogs durch den Benutzer bewirkt einen Fehler
    On Error Resume Next                            'Schaltet die Fehlerbehandlung aus.Tritt ein Fehler auf wird
                                                    'die Programmausführung mit dem nächsten Befehl fortgesetzt
    'Eigenschaften setzen
    DateiDialog.DialogTitle = "Datei einlesen"
    DateiDialog.InitDir = "C:\temp\Messsdaten"
    DateiDialog.Filter = "Textdateien|*.txt|Alle Dateien|*.*"
    DateiDialog.DefaultExt = "txt"                  'automatisch ergänztes Dateikürzel,falls Benutzer keins angibt
    DateiDialog.ShowOpen
    If Err.Number = 0 Then
        'Datei öffnen
        MsgBox (DateiDialog.FileName)
        DateiEinlesen.Enabled = True                'Auswahl Einlesen wird Aktiviert
        MessdatenEinlesen.Enabled = True            'Auswahl Messdaten aktiviert
        MessdatenAusgeben.Enabled = True
    End If
End Sub
'Sortieren von Messdaten
Private Sub MessdatenSortieren_Click()
    Dim i As Long
    Dim erg As String
    Dim j As Long
    Dim h As String                                'Hilfsvariable zum Tauschen
    Dim k As Byte                                  'Hilfsvariable zum Tauschen
    Dim l As Byte                                  'Hilfsvariable zum Tauschen
    
    For j = LBound(datenB) + 1 To UBound(datenB) - 1
        For i = LBound(datenB) + 1 To UBound(datenB) - 1
            If datenB(i).station > datenB(i + 1).station Or ((datenB(i).station = datenB(i + 1).station) And (datenB(i).nummer > datenB(i + 1).nummer)) Then
            
                h = datenB(i).station
                k = datenB(i).nummer
                l = datenB(i).wert
                
                datenB(i).station = datenB(i + 1).station
                datenB(i).nummer = datenB(i + 1).nummer
                datenB(i).wert = datenB(i + 1).wert
                
                datenB(i + 1).station = h
                datenB(i + 1).nummer = k
                datenB(i + 1).wert = l
                
            End If
        Next i
    Next j
End Sub
'Stationsdaten ausgeben
Private Sub StationsdatenAusgeben_Click()
    Dim i As Integer
    Dim erg As String
    
    For i = 1 To UBound(datenA) - 1
        erg = erg & datenA(i).koord.x & Chr(9) & datenA(i).koord.y & Chr(9) & datenA(i).station & vbNewLine
    Next i
        
    Debug.Print erg
End Sub

'Messstationsdaten laden
Private Sub StationsdatenLaden_Click()
    'Fehlerbehandlung definieren
    DateiDialog.CancelError = True                  'Abbrechen des Dialogs durch den Benutzer bewirkt einen Fehler
    On Error Resume Next                            'Schaltet die Fehlerbehandlung aus.Tritt ein Fehler auf wird
                                                    'die Programmausführung mit dem nächsten Befehl fortgesetzt
    'Eigenschaften setzen
    DateiDialog.DialogTitle = "Datei einlesen"
    DateiDialog.InitDir = "C:\temp\Stationsdaten"
    DateiDialog.Filter = "Textdateien|*.txt|Alle Dateien|*.*"
    DateiDialog.DefaultExt = "txt"                  'automatisch ergänztes Dateikürzel,falls Benutzer keins angibt
    DateiDialog.ShowOpen
    If Err.Number = 0 Then
        'Datei öffnen
        MsgBox (DateiDialog.FileName)
        DateiEinlesen.Enabled = True                'Auswahl Einlesen wird Aktiviert
        StationsdatenEinlesen.Enabled = True            'Auswahl Messdaten aktiviert
        StationsdatenAusgeben.Enabled = True
    End If
End Sub

'Aufruf zum Messstationdaten Einlesen Vorgang
Private Sub StationsdatenEinlesen_Click()
    Call EinlesenStationsdaten("DateiDialog.FileName")
End Sub

'Messstationsdaten einlesen
Private Sub EinlesenStationsdaten(datei As String)
    On Error Resume Next
    Dim i As Integer
    Dim kanal As Byte
    Dim erg As String
    
    i = 1
    datei = DateiDialog.FileName
    kanal = FreeFile                                     'Kanalnummer bestimmen
    ReDim datenA(1)                                      'Dimension wird im Programmverlauf bestimmt
    Open datei For Input As #kanal
        Do While Not EOF(kanal)
            If UBound(datenA) = i Then
                ReDim Preserve datenA(i + 1)                 'Dimension wird verändert, der alte Inhalt bleibt
            End If
            
            Input #kanal, datenA(i).koord.x              'Koordinate x einlesen
            Input #kanal, datenA(i).koord.y              'Koordinate y einlesen
            Input #kanal, datenA(i).station              'Station einlesen
            i = i + 1
        Loop
    Close #kanal
End Sub

'Messdaten einlesen
Private Sub EinlesenMessdaten(datei As String)
    On Error Resume Next
    Dim i As Integer
    Dim kanal As Byte
    Dim erg As String
    
    i = 1
    datei = DateiDialog.FileName
    kanal = FreeFile                                    'Kanalnummer bestimmen
    ReDim datenB(1)                                      'Dimension wird im Programmverlauf bestimmt
    Open datei For Input As #kanal
        Do While Not EOF(kanal)
            If UBound(datenB) = i Then
                ReDim Preserve datenB(i + 1)
            End If
            
            Input #kanal, datenB(i).nummer              'Koordinate x einlesen
            Input #kanal, datenB(i).wert             'Koordinate y einlesen
            Input #kanal, datenB(i).station              'Station einlesen
            i = i + 1
        Loop
    Close #kanal
End Sub

Ich hoffe, es hat einer eine verständliche Lösung für mich...
 
ich gehe davon aus, dass du in deiner orginalen Textbatei den Tabulator benutzt hast um den Text so auszurichten....

dann versuch es mal so:
Code:
Textdokument = "1" & Chr(9) & "13" & Chr(9) & "Berg" & Chr(13) & "2" & Chr(9) & "11" & Chr(9) & "Berg"

dabei bewirkt Chr(9) den Tab und Chr(13) bzw. vbCrLf den Zeilenumbruch


hoff das dich das weiterbringt

Jonas
 

Neue Beiträge

Zurück