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:
In dieser Art sollten die Daten auch wieder in Debug.Print ausgegeben werden.
Bei mir sieht das allerdings so aus:
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:
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:
Ich hoffe, es hat einer eine verständliche Lösung für mich...
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...