Laden...

Problem mit if-Anweisung und eigener erstellter Klasse

Erstellt von getle87 vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.114 Views
G
getle87 Themenstarter:in
36 Beiträge seit 2007
vor 16 Jahren
Problem mit if-Anweisung und eigener erstellter Klasse

Ich schreibe zur Zeit an einem PocketPC Programm zum Auslesen einer GPS-COM-Schnittstelle, da die ToCharArray(Int32,Int32) von Compact Framework leider nicht unterstützt wird und ich keine Lust habe jedes Zeichen einzeln auszulesen, hab ich mir selber so eine Funktion geschrieben, komisch ist nur das der Vergleich in der Hauptfunktion seitdem nicht funktioniert obwohl der Testwert den ich mir ausgeben lasse genau der gleiche ist der in der if-Anweisung abgefragt wird ("$GPGGA" = "$GPGGA"), ich brauch diesen Vergleich um ein "leeres" bzw. fehlerhaftes Auslesen der Folgewerte und der die darauf folgende Fehlermeldung von dem PPC zu verhindern (der Wert in data ist fiktiv und kommt normalerweise von der COM), hat jemand von euch ne Ahnung was da schief läuft, ich kenn mich nicht so extrem mit C# aus. Ich scheib mal den Code drunter:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;


namespace ExperimentalGPS
{
    public partial class Form1 : Form
    {
        public string createarray(string input, int offset, int steps)
        {
            int leng, counter = 0;
            string outputstring;
            leng = input.Length;
            char[] output = new char[leng];
            do
            {
                output[counter] = Convert.ToChar(input[offset + counter]);
                counter++;
            }
            while (counter <= steps);
            outputstring = new string(output);
            return outputstring;
        }
        public Form1()
        {
            InitializeComponent();
        }
        public void menuItem1_Click(object sender, EventArgs e)
        {
            Close();
        }
        public void GPSTimer_Tick(object sender, EventArgs e)
        {
            string check;
            string data = "$GPGGA,010612,292.292,5110.2066";
            check = createarray(data, 0, 5);
// würde ich jetzt hier "check = "$GPGGA"" hinschreiben geht es komischer Weise
            textBox2.Text = check; // wird angezeigt und Wert stimmt mit if-Anweisung überein
            if (check == "$GPGGA")
            {
                textBox1.Text = check; // wird seltsamerweise nicht angezeigt ???
            }
        }
        public void menuItem3_Click(object sender, EventArgs e)
        {
            GPSTimer.Enabled = false;
        }

        public void menuItem4_Click(object sender, EventArgs e)
        {
            GPSTimer.Enabled = true;
        }
    }
}
2.760 Beiträge seit 2006
vor 16 Jahren

string data = "$GPGGA,010612,292.292,5110.2066";
check = createarray(data, 0, 5);

Deine Funktion createarray gibt es schon 😉 heisst Substring().

Char[] != string Denke ich jetzt mal.

G
getle87 Themenstarter:in
36 Beiträge seit 2007
vor 16 Jahren
Einwandfrei

Jo funzt, ich kann sogar den Char-Datentyp endlich verbannen (Hauptfehlerquelle), ich danke Dir 👍. Ihr könnt ja trotzdem mal nachprüfen woran das gelegen haben könnte und hier eine Erkärung posten, mich würde es jedenfalls interessieren.

2.760 Beiträge seit 2006
vor 16 Jahren

Wenn es jetzt funzt dann war es ja die Lösung, du kommst wahrscheinlich aus dem C-Bereich (wegen deiner char[]s).
Es kann sein (habs noch nie gemacht) das er ein char[] automatisch in einen String konvertiert es dann allerdings noch nicht das Selbe ist.

G
getle87 Themenstarter:in
36 Beiträge seit 2007
vor 16 Jahren

Ich komm eigentlich ne aus dem C-Bereich, hatte vorher mit Delphi zu tun (Schule, war mein Einstieg in die Welt der Programmierung), dann mal ansatzweise mit C++ (ist mir aber zu schwer), durch meine Berufsausbildung lern ich etwas C#, ich begreife allerdings die einfach strukturierten Programmiersprachen relativ schnell da sie logisch aufgebaut sind und leicht zu verstehende Befehle verwenden (C++ ist dies meiner Meinung nach nicht) und kann mich daher eigenständig weiterbilden.

Ich hab auch das Gefühl das der String aus dem Char Array irgendwas enthält (unsichtbare Zeichen) die beim Abgleich blockieren.

183 Beiträge seit 2004
vor 16 Jahren

Hallo getle87,

das Problem ist deine Abbruchbedingung in der while-Schleife von createarray.

Beim Debuggen müsste dir aufgefallen sein, dass bei counter == 5 nur 4 Zeichen kopiert worden sind.

Ich würd dir für derartiges immer for-Schleifen empfehlen 😉

Grüße

él toro

So einfach wie möglich, aber nicht einfacher. [Albert Einstein]

take a look at
* baer-torsten.de
* codinghints

G
getle87 Themenstarter:in
36 Beiträge seit 2007
vor 16 Jahren

Eigentlich müssten es 6 sein da der counter ja ab 0 beginnt und bis 5 zählt und der Betrag der Zahlen ingesamt 6 ist (6 Ziffern), außer natürlich wenn erst while überprüft wird bevor die Schleife ausgeführt wird, dann sind es nur 5, da sich nach dem 5. Ausführen counter auf 5 erhöht und die Schliefe dann blocken würde.

183 Beiträge seit 2004
vor 16 Jahren

Hast Recht, hab deinen Code wohl zu schnell überflogen 😉

Ich hab deinen Code mal Debugged und des Rätsels Lösung (siehe Bild) ...

Müsste dir eigentlich beim Debuggen aufgefallen sein ?(

So einfach wie möglich, aber nicht einfacher. [Albert Einstein]

take a look at
* baer-torsten.de
* codinghints