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;
}
}
}
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.
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.
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.
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.
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
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.
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