tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
744
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Dark Ranger Dark Ranger ist offline Mitglied Brokat
    Registriert seit
    Aug 2005
    Beiträge
    436
    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
    2
    3
    4
    5
    6
    7
    8
    
     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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
     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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
     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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    
    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...
     

  2. #2
    Avatar von der jonas
    der jonas der jonas ist offline Mitglied Gold
    Registriert seit
    Oct 2004
    Beiträge
    124
    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 :
    1
    
    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
     
    Ich distansiere mich hiermit ausdrücklich von allen Postings mit unsinnigen, ironischen oder einfach falschen Inhalten !

Ähnliche Themen

  1. JS / Daten im Div ausgeben
    Von newwarrior im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 23.06.08, 08:47
  2. js&xml daten ausgeben
    Von rand0m im Forum Javascript & Ajax
    Antworten: 0
    Letzter Beitrag: 17.05.07, 14:27
  3. XML Daten mit PHP ausgeben
    Von ChuloGT im Forum PHP
    Antworten: 0
    Letzter Beitrag: 06.10.04, 14:47
  4. Daten ausgeben (von bis)
    Von -oKruemelo- im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 01.07.04, 09:51
  5. XML Daten Ausgeben
    Von harleaquin im Forum HTML & XHTML
    Antworten: 0
    Letzter Beitrag: 11.04.04, 17:31