Hallo ich verzweifle schon 2 Tage an einem Problem!
Folgendes Programm:
dazu eine Klasse Punkt:
und eine Klasse Gleichsetzen:
Das Programm soll mir die Koordinaten der Punkte aus einer externen Messdatei auslesen, die (in Auszügen) so aussieht:
1 KOORDINATEN/
2 301.1001 05 Y 3536737.746 X 5455937.909 Z 310.630
3 201.1003 05 Y 3536738.881 X 5456410.283 Z 322.356
4 6723.0107 03 Y 3536900.790 X 5455318.840 Z 301.150
5 STAT. AUF BEK. PKT./
6 301.1001 05 Y 3536737.746 X 5455937.909 Z 310.630
7 301.1001 05 m 1.000000 ih 1.480
8 6723.0107 03 Hz 44.4121 V1 100.9295
9 201.1003 05 Hz 260.9572 V1 98.4046
10 KOORDINATEN/POLARPUNKTE/
11 3.1001 74 D 49.172 Hz 276.8334 V1 102.2361
12 EINGABEWERTE m 1.000000 th 1.500 ih 1.480
13 KOORDINATEN/POLARPUNKTE/
14 3.1002 74 D 61.310 Hz 317.9288 V1 104.5838
15 3.1003 74 D 58.789 Hz 319.4395 V1 104.8252
16 3.1004 74 D 71.561 Hz 333.9190 V1 105.8891
17 3.1005 74 D 73.404 Hz 332.0761 V1 105.8218
18 3.1006 74 D 87.680 Hz 341.7541 V1 106.1667
19 3.1007 74 D 86.307 Hz 343.6175 V1 106.0763
20 3.1008 74 D 104.059 Hz 348.7034 V1 105.6905
21 3.1009 74 D 103.262 Hz 350.4580 V1 105.5554
22 3.1010 74 D 120.709 Hz 353.4070 V1 104.9813
23 3.1011 74 D 119.776 Hz 354.8020 V1 104.9695
24 3.1012 98 D 101.198 Hz 361.5887 V1 105.6596
25 3.1013 98 D 118.295 Hz 361.9065 V1 105.0703
26 3.1014 98 D 101.090 Hz 373.1018 V1 105.4789
27 3.1015 98 D 119.351 Hz 372.2168 V1 104.9217
28 3.1016 98 D 105.053 Hz 384.0973 V1 104.9202
29 3.1017 98 D 122.608 Hz 381.6884 V1 104.5954
30 3.1018 98 D 111.162 Hz 393.4825 V1 104.2616
soweit funktioniert das auch, zumindest mit den erstellen der log datei, allerdings ist die fast leer, bzw liest einfach keine daten ein!
Projektarbeit Programmieren SS12
Tanja Maurer. Der aktuelle Benutzer ist: Besitzer
Pfad der Eingabedatei:c:/users/besitzer/messdaten_ss12.rec
Datum: Donnerstag, 19. Juli 2012 Uhrzeit: 16:31:40
Anzahl der eingelesenen Festpunkte: 0
Anzahl der eingelesenen Standpunkte: 0
Anzahl der eingelesenen Messwerte: 0
Anzahl der berechneten Neupunkte: 0
Und die .out Datei, in der die Koordinaten stehen sollen, ist auch leer.
Punktnummer Ebene|Punktart Rechtswert (Y) Hochwert (X) Höhe (z)
ich bin mir sicher, dass das problem ganz einfach ist und ich grad nur den wald vor lauter bäumen nicht sehe!
aber wär super, wenn mir jemand helfen könnte!
Folgendes Programm:
VB.NET-Quellcode
- Imports System.IO
- Module Module1
- Dim Ausgang(2, 5) As Decimal
- Dim XYZGrundwerte(5), Inst_Grundwerte(4), Winkel_Grundwerte(1, 4), Eingabewerte(3), Rechenwerte(100, 6) As Decimal
- Dim Ausgabename, Ausgabeverzeichnis, Ausgabezeilen, Eingabepfad, Eingabezeilen As String
- Dim Zähler, Anzahl_Festpkt, Anzahl_Mess, Anzahl_Stpkt, Anzahl_Neupkt As Short
- Dim S0, S1, S2, S3, S4 As Boolean
- Dim SW, Ausgabe As IO.StreamWriter
- Dim SR As IO.StreamReader
- Dim SortWerte As New SortedList(Of Gleichsetzen, Double)
- Sub Main()
- Einlesen()
- Dim NeuBerechnung As Punkt = New Punkt(Ausgang(0, 4), Ausgang(0, 3), XYZGrundwerte(5), Eingabewerte(3), Inst_Grundwerte(3), _
- Inst_Grundwerte(4), Ausgang(1, 3), Ausgang(1, 4), Winkel_Grundwerte(1, 3))
- Dim BerechneteWerte(100, 5), RiWi, WerteNeu() As Decimal
- Console.WriteLine("Bitte geben Sie einen Namen für die Ausgabedatei ein")
- Ausgabename = Console.ReadLine
- If Ausgabename = "" Then
- Ausgabename = Eingabepfad
- Else
- Ausgabename = Ausgabename
- Console.WriteLine("Bitte geben Sie das Verzeichnis an in dem die Ausgabedatei erzeugt werden soll!")
- Ausgabeverzeichnis = Console.ReadLine
- End If
- Ausgabedatei(" Punktnummer Ebene|Punktart Rechtswert (Y) Hochwert (X) Höhe (z) ")
- For i As Integer = 0 To Rechenwerte.GetUpperBound(0)
- If Rechenwerte(i, 0) = Nothing Then Exit For
- RiWi = NeuBerechnung.Richtungswinkel
- WerteNeu = NeuBerechnung.Polar(RiWi, Rechenwerte(i, 3))
- BerechneteWerte(i, 0) = i
- BerechneteWerte(i, 1) = Rechenwerte(i, 1)
- BerechneteWerte(i, 2) = Rechenwerte(i, 2)
- BerechneteWerte(i, 3) = WerteNeu(0)
- BerechneteWerte(i, 4) = WerteNeu(1)
- BerechneteWerte(i, 5) = NeuBerechnung.Hoehe(Rechenwerte(i, 2), Rechenwerte(i, 4))
- Anzahl_Neupkt += 1
- Ausgabezeilen = (" ") & BerechneteWerte(i, 1).ToString("0000.0000") & _
- (" ") & BerechneteWerte(i, 2).ToString("00") & _
- (" ") & BerechneteWerte(i, 3).ToString("0000000.000") & _
- (" ") & BerechneteWerte(i, 4).ToString("0000000.000") & _
- (" ") & BerechneteWerte(i, 5).ToString("000.000")
- Ausgabezeilen = Ausgabezeilen.Replace(",", ".")
- Ausgabedatei(Ausgabezeilen)
- Next
- Protokol("Anzahl der eingelesenen Festpunkte: " & Anzahl_Festpkt)
- Protokol("Anzahl der eingelesenen Standpunkte: " & Anzahl_Stpkt)
- Protokol("Anzahl der eingelesenen Messwerte: " & Anzahl_Mess)
- Protokol("Anzahl der berechneten Neupunkte: " & Anzahl_Neupkt)
- For j As Integer = 0 To BerechneteWerte.GetUpperBound(0)
- If BerechneteWerte(j, 1) = Nothing Then Exit For
- SortWerte.Add(New Gleichsetzen(BerechneteWerte(j, 1)), BerechneteWerte(j, 2))
- Next
- For Each WertePaar As KeyValuePair(Of Gleichsetzen, Double) In SortWerte
- Console.WriteLine("{0} {1}", WertePaar.Key.PktNr, WertePaar.Value)
- Next
- Console.WriteLine()
- Console.WriteLine(">>>ENTER")
- Console.ReadLine()
- End Sub
- Sub Einlesen()
- Dim Existiert As Boolean = False
- Do
- Console.WriteLine("Bitte den Dateipfad eingeben")
- Console.WriteLine()
- Eingabepfad = Console.ReadLine()
- Try
- SR = New IO.StreamReader(Eingabepfad)
- Existiert = True
- Catch ex As Exception
- Console.WriteLine("Fehler! Die Datei gibt es nicht oder der Pfad wurde falsch angegeben.")
- Console.WriteLine("Bitte Dateipfad erneut eingeben")
- Console.WriteLine(ex.Message)
- Console.WriteLine()
- End Try
- Loop Until Existiert
- Protokol("Projektarbeit Programmieren SS12")
- Protokol("Tanja Maurer. Der aktuelle Benutzer ist: " & Environment.UserName)
- Protokol("Pfad der Eingabedatei:" & Eingabepfad)
- Protokol("Datum: " & Now.ToLongDateString & " Uhrzeit: " & Now.ToLongTimeString)
- Do While SR.Peek() >= 0
- If S0 = True Then Grundfaktor(Eingabezeilen)
- If S1 = True Then Grundwert(Eingabezeilen)
- If S2 = True Then Eingabe(Eingabezeilen)
- If S3 = True Then Rechnung(Eingabezeilen)
- If Zähler = 64 Then
- Exit Do
- End If
- Eingabezeilen = SR.ReadLine
- If Eingabezeilen.Contains("KOORDINATEN") And Not Eingabezeilen.Contains("POLARPUNKTE") Then
- S0 = True
- End If
- If Eingabezeilen.Contains("STAT. AUF BEK. PKT.") Then
- S1 = True
- S0 = False
- Zähler = 0
- End If
- If Eingabezeilen.Contains("EINGABEWERTE") Then
- S2 = True
- S1 = False
- S0 = False
- End If
- If Eingabezeilen.Contains("POLARPUNKTE") Then
- S3 = True
- S2 = False
- S1 = False
- If Rechenwerte(0, 0) = Nothing Then Zähler = 0
- End If
- Loop
- SR.Close()
- End Sub
- Public Sub Protokol(ByVal Text As String)
- SW = New IO.StreamWriter(Eingabepfad.Replace(".rec", ".log.txt"), True)
- SW.WriteLine(Text)
- SW.Close()
- End Sub
- Sub Ausgabedatei(ByVal Ausgabezeilen As String)
- Try
- If Ausgabename = Eingabepfad Then
- Ausgabe = New StreamWriter(Ausgabename.Replace(".rec", ".out.txt"), True)
- Else
- Ausgabe = New StreamWriter(Ausgabeverzeichnis & "\" & Ausgabename & ".out" & ".txt", True)
- End If
- Ausgabe.WriteLine(Ausgabezeilen)
- Ausgabe.Close()
- Catch ex As Exception
- Console.WriteLine("Fehler beim Erzeugen der Datei")
- End Try
- End Sub
- Private Sub Grundfaktor(ByVal Zeile As String)
- Dim Nummer As Integer
- Try
- If Zeile.Contains("KOORDINATEN") Then Exit Sub
- Zeile = Zeile.Replace(".", ",")
- Nummer = CInt(Zeile.Substring(0, 5))
- Dim Punktwert1 As Double = CDec(Zeile.Substring(7, 13))
- Dim Punktart As Double = CDec(Zeile.Substring(20, 2))
- Dim Y As Double = CDec(Zeile.Substring(36, 12))
- Dim X As Double = CDec(Zeile.Substring(53, 12))
- Dim Z = CDec(Zeile.Substring(66, 10))
- Ausgang(Zähler, 0) = Nummer
- Ausgang(Zähler, 1) = Punktwert1
- Ausgang(Zähler, 2) = Punktart
- Ausgang(Zähler, 3) = Y
- Ausgang(Zähler, 4) = X
- Ausgang(Zähler, 5) = Z
- Zähler += 1
- Anzahl_Festpkt += 1
- Anzahl_Mess += 3
- Catch ex As Exception
- Protokol("In der Zeile " & Nummer & " ist ein Fehler: " & ex.Message)
- End Try
- End Sub
- Private Sub Grundwert(ByVal Zeile As String)
- Dim Nummer As Integer
- Try
- If Zeile.Contains("STAT. AUF BEK. PKT.") Then Exit Sub
- Zeile = Zeile.Replace(".", ",")
- If Zeile.Contains("X") And Zeile.Contains("Y") And Zeile.Contains("Z") Then
- Nummer = CInt(Zeile.Substring(0, 5))
- XYZGrundwerte(0) = Nummer
- XYZGrundwerte(1) = CDec(Zeile.Substring(7, 13))
- XYZGrundwerte(2) = CDec(Zeile.Substring(20, 2))
- XYZGrundwerte(3) = CDec(Zeile.Substring(36, 12))
- XYZGrundwerte(4) = CDec(Zeile.Substring(53, 12))
- XYZGrundwerte(5) = CDec(Zeile.Substring(66, 10))
- Anzahl_Mess += 3
- Exit Sub
- End If
- If Zeile.Contains("m") Or Zeile.Contains("ih") Then
- Nummer = CInt(Zeile.Substring(0, 5))
- Inst_Grundwerte(0) = Nummer
- Inst_Grundwerte(1) = CDec(Zeile.Substring(7, 12))
- Inst_Grundwerte(2) = CDec(Zeile.Substring(20, 2))
- Inst_Grundwerte(3) = CDec(Zeile.Substring(36, 12))
- Inst_Grundwerte(4) = CDec(Zeile.Substring(53, 7))
- Anzahl_Mess += 2
- Exit Sub
- End If
- If Zeile.Contains("Hz") And Zeile.Contains("V1") Then
- Nummer = CInt(Zeile.Substring(0, 5))
- Winkel_Grundwerte(Zähler, 0) = Nummer
- Winkel_Grundwerte(Zähler, 1) = CDec(Zeile.Substring(7, 13))
- Winkel_Grundwerte(Zähler, 2) = CDec(Zeile.Substring(20, 2))
- Winkel_Grundwerte(Zähler, 3) = CDec(Zeile.Substring(53, 12))
- Winkel_Grundwerte(Zähler, 4) = CDec(Zeile.Substring(68, 8))
- Zähler += 1
- Anzahl_Mess += 2
- End If
- Catch ex As Exception
- Protokol("In der Zeile " & Nummer & " ist ein Fehler: " & ex.Message)
- End Try
- End Sub
- Private Sub Eingabe(ByVal Zeile As String)
- Dim Nummer As Integer
- Try
- If Zeile.Contains("EINGABEWERTE") Then
- Zeile = Zeile.Replace(".", ",")
- Nummer = CInt(Zeile.Substring(0, 5))
- Eingabewerte(0) = Nummer
- Eingabewerte(1) = CDec(Zeile.Substring(36, 12))
- Eingabewerte(2) = CDec(Zeile.Substring(53, 12))
- Eingabewerte(3) = CDec(Zeile.Substring(68, 8))
- Anzahl_Mess += 3
- End If
- Catch ex As Exception
- Protokol("In der Zeile " & Nummer & " ist ein Fehler: " & ex.Message)
- End Try
- End Sub
- Private Sub Rechnung(ByVal Zeile As String)
- Dim Nummer As Integer
- Try
- If Zeile.Contains("KOORDINATEN/POLARPUNKTE") Then Exit Sub
- Zeile = Zeile.Replace(".", ",")
- Zeile = CInt(Zeile.Substring(0, 5))
- Rechenwerte(Zähler, 0) = Nummer
- Rechenwerte(Zähler, 1) = CDec(Zeile.Substring(7, 13))
- Rechenwerte(Zähler, 2) = CDec(Zeile.Substring(20, 2))
- Rechenwerte(Zähler, 3) = CDec(Zeile.Substring(36, 12))
- Rechenwerte(Zähler, 4) = CDec(Zeile.Substring(53, 12))
- Rechenwerte(Zähler, 5) = CDec(Zeile.Substring(68, 8))
- Zähler += 1
- Anzahl_Mess += 3
- Anzahl_Stpkt += 1
- Catch ex As Exception
- Protokol("In der Zeile " & Nummer & " ist ein Fehler: " & ex.Message)
- End Try
- End Sub
- End Module
dazu eine Klasse Punkt:
VB.NET-Quellcode
- Public Class Punkt
- Dim meinPunkt As Decimal
- Dim meinR, meinH, meinH2, meinR2 As Decimal
- Dim meineHoehe, meineHoeheInstr, meineZielhoehe As Decimal
- Dim meinHorizont, meinMaßstab As Decimal
- Public ReadOnly Property Punkt() As String
- Get
- Return meinPunkt
- End Get
- End Property
- Public Sub New(ByVal X As Decimal, ByVal Y As Decimal, ByVal Z As Decimal, ByVal th As Decimal, ByVal m As Decimal, ByVal ih As Decimal, ByVal Y2 As Decimal, ByVal X2 As Decimal, ByVal Hz As Decimal)
- meinR = X
- meinH = Y
- meinH2 = Y2
- meinR2 = X2
- meineHoehe = Z
- meineHoeheInstr = ih
- meineZielhoehe = th
- meinHorizont = Hz
- meinMaßstab = m
- End Sub
- Public Function Hoehe(ByVal D As Decimal, ByVal V1 As Decimal) As Decimal
- Dim NeueHoehe As Decimal
- If D > 250 Then
- NeueHoehe = meineHoehe + meineHoeheInstr + D * Math.Cos(V1) - meineZielhoehe
- Else
- NeueHoehe = meineHoehe + meineHoeheInstr + D * Math.Cos(V1) + (D ^ 2 / (2 * 6380000)) * 0.87 - meineZielhoehe
- End If
- Return NeueHoehe
- End Function
- Public Function Richtungswinkel()
- Dim yp, xp, t As Decimal
- xp = meinR2 - meinR
- yp = meinH2 - meinH
- If Math.Abs(yp) = 0 And Math.Abs(xp) = 0 Then
- Return -1
- End If
- If Math.Abs(xp) = 0 Then
- If yp < 0 Then Return 300
- If yp > 0 Then Return 100
- End If
- t = Math.Atan(yp / xp)
- If xp < 0 Then
- t += 200
- End If
- If t < 0 Then
- t += 400
- End If
- Return t
- End Function
- Public Function Polar(ByVal t As Decimal, ByVal Hz As Decimal) As Decimal()
- Dim Werte(1) As Decimal
- Dim c, b As Decimal
- c = Math.Sqrt((meinR2 - meinR) ^ 2 + (meinH2 - meinH) ^ 2)
- b = c * (Math.Sin(meinHorizont) / Math.Sin(Hz + meinHorizont))
- Werte(0) = meinH + b * Math.Sin(t)
- Werte(1) = meinR + b * Math.Cos(t)
- Return Werte
- End Function
- End Class
und eine Klasse Gleichsetzen:
VB.NET-Quellcode
- Imports System
- Imports System.Collections
- Public Class Gleichsetzen
- Implements IComparable(Of Gleichsetzen)
- Protected myValue As Decimal = 0.0
- Public Sub New(ByVal Punktnummer As Decimal)
- Me.PktNr = Punktnummer
- End Sub
- Public Property PktNr As Decimal
- Get
- Return myValue
- End Get
- Set(ByVal value As Decimal)
- myValue = value
- End Set
- End Property
- Public Overloads Function CompareTo(ByVal PunktN As Gleichsetzen) As Integer Implements System.IComparable(Of Gleichsetzen).CompareTo
- Return myValue.CompareTo(PunktN.myValue)
- End Function
- End Class
Das Programm soll mir die Koordinaten der Punkte aus einer externen Messdatei auslesen, die (in Auszügen) so aussieht:
1 KOORDINATEN/
2 301.1001 05 Y 3536737.746 X 5455937.909 Z 310.630
3 201.1003 05 Y 3536738.881 X 5456410.283 Z 322.356
4 6723.0107 03 Y 3536900.790 X 5455318.840 Z 301.150
5 STAT. AUF BEK. PKT./
6 301.1001 05 Y 3536737.746 X 5455937.909 Z 310.630
7 301.1001 05 m 1.000000 ih 1.480
8 6723.0107 03 Hz 44.4121 V1 100.9295
9 201.1003 05 Hz 260.9572 V1 98.4046
10 KOORDINATEN/POLARPUNKTE/
11 3.1001 74 D 49.172 Hz 276.8334 V1 102.2361
12 EINGABEWERTE m 1.000000 th 1.500 ih 1.480
13 KOORDINATEN/POLARPUNKTE/
14 3.1002 74 D 61.310 Hz 317.9288 V1 104.5838
15 3.1003 74 D 58.789 Hz 319.4395 V1 104.8252
16 3.1004 74 D 71.561 Hz 333.9190 V1 105.8891
17 3.1005 74 D 73.404 Hz 332.0761 V1 105.8218
18 3.1006 74 D 87.680 Hz 341.7541 V1 106.1667
19 3.1007 74 D 86.307 Hz 343.6175 V1 106.0763
20 3.1008 74 D 104.059 Hz 348.7034 V1 105.6905
21 3.1009 74 D 103.262 Hz 350.4580 V1 105.5554
22 3.1010 74 D 120.709 Hz 353.4070 V1 104.9813
23 3.1011 74 D 119.776 Hz 354.8020 V1 104.9695
24 3.1012 98 D 101.198 Hz 361.5887 V1 105.6596
25 3.1013 98 D 118.295 Hz 361.9065 V1 105.0703
26 3.1014 98 D 101.090 Hz 373.1018 V1 105.4789
27 3.1015 98 D 119.351 Hz 372.2168 V1 104.9217
28 3.1016 98 D 105.053 Hz 384.0973 V1 104.9202
29 3.1017 98 D 122.608 Hz 381.6884 V1 104.5954
30 3.1018 98 D 111.162 Hz 393.4825 V1 104.2616
soweit funktioniert das auch, zumindest mit den erstellen der log datei, allerdings ist die fast leer, bzw liest einfach keine daten ein!
Projektarbeit Programmieren SS12
Tanja Maurer. Der aktuelle Benutzer ist: Besitzer
Pfad der Eingabedatei:c:/users/besitzer/messdaten_ss12.rec
Datum: Donnerstag, 19. Juli 2012 Uhrzeit: 16:31:40
Anzahl der eingelesenen Festpunkte: 0
Anzahl der eingelesenen Standpunkte: 0
Anzahl der eingelesenen Messwerte: 0
Anzahl der berechneten Neupunkte: 0
Und die .out Datei, in der die Koordinaten stehen sollen, ist auch leer.
Punktnummer Ebene|Punktart Rechtswert (Y) Hochwert (X) Höhe (z)
ich bin mir sicher, dass das problem ganz einfach ist und ich grad nur den wald vor lauter bäumen nicht sehe!
aber wär super, wenn mir jemand helfen könnte!
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Tanscha“ ()