Řetězec nemá správný vstupní formát – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Řetězec nemá správný vstupní formát – .NET – Fórum – Programujte.comŘetězec nemá správný vstupní formát – .NET – Fórum – Programujte.com

 

TD
~ Anonymní uživatel
28 příspěvků
20. 3. 2016   #1
-
0
-

Dobrý večer, Mam takový dotaz. Mam v c#  form aplikaci a stale mi to při try
catch (ochytavani vynimek) vypisuje chybu : Řetězec nemá správný vstupní formát. Skoušel sem to debugovat ale stale nemožen najit tu chybu.Jak vstupný řetezec je posilany po serové komunikaci.  Dekuju moc za každou radu :)

        private void set_axis(string text)
        {
            try  //ošetreni chyb
            {

                if (this.X_progressBar.InvokeRequired)
                {
                    SetTextCallback d = new SetTextCallback(set_axis);
                    this.Invoke(d, new object[] { text });
                }
                else
                {
                    str += text;
                    int i1 = str.IndexOf("BEG");
                    int i2 = str.IndexOf("BEG", 1 + i1);
                    if ((-1 != i1) && (-1 != i2))
                    {
                        string current = str.Substring(0, i2);
                        current = current.Substring(current.IndexOf("BEG"));
                        str = str.Substring(i2);

                        int beg_index = current.IndexOf("BEG");
                        int x_index = current.IndexOf("X");
                        int y_index = current.IndexOf("Y");
                        int z_index = current.IndexOf("Z");

                        if ((0 != beg_index) || (3 != x_index) || (-1 == y_index) || (-1 == z_index))
                        {//Error XXX ,beg_index = XXX , x_index = XX , y_index = XX , z_index = XX
   MessageBox.Show("Error " + current + ", beg_index = " + beg_index.ToString() + ", x_index = " + x_index.ToString() + ", y_index = " + y_index.ToString() + ", z_index = " + z_index.ToString());
                            return;
                        }

                        int x = Convert.ToInt32(current.Substring(x_index + 1, y_index - x_index - 1));
                        int y = Convert.ToInt32(current.Substring(y_index + 1, z_index - y_index - 1));
                        int z = Convert.ToInt32(current.Substring(z_index + 1));

                        if (x > X_progressBar.Maximum) x = X_progressBar.Maximum;
                        if (y > Y_progressBar.Maximum) y = Y_progressBar.Maximum;
                        if (z > Z_progressBar.Maximum) z = Z_progressBar.Maximum;

                        if (x < X_progressBar.Minimum) x = X_progressBar.Minimum;
                        if (y < Y_progressBar.Minimum) y = Y_progressBar.Minimum;
                        if (z < Z_progressBar.Minimum) z = Z_progressBar.Minimum;

                        X_progressBar.Value = x;
                        Y_progressBar.Value = y;
                        Z_progressBar.Value = z;
                    }
                }

            }
            catch (Exception x)
            {
                MessageBox.Show(x.Message.ToString());
            }
        }
Nahlásit jako SPAM
IP: 89.103.90.–
TD
~ Anonymní uživatel
28 příspěvků
20. 3. 2016   #2
-
0
-

Popripade prosim o radu jakym efektivnim spusobem pri c# nahradit Cečkovské scanf(); Dekuju ide o spracovani predem daneho řetezce a prideleni vnitřních dat napr do prograssbaru alebo Label. Dekuju

Nahlásit jako SPAM
IP: 89.103.90.–
P
~ Anonymní uživatel
212 příspěvků
21. 3. 2016   #3
-
0
-

Na nekterem z techto radku 

int x = Convert.ToInt32(current.Substring(x_index + 1, y_index - x_index - 1));
int y = Convert.ToInt32(current.Substring(y_index + 1, z_index - y_index - 1));
int z = Convert.ToInt32(current.Substring(z_index + 1));

nema parametr metody Convert.ToInt32 tvar cisla.

Nahlásit jako SPAM
IP: 95.82.135.–
petrph0
Newbie
21. 3. 2016   #4
-
0
-

#2 TD
V C# je ekvivalentem scanf  v konzolove apliakci Console.ReadLine, která ti ale vždycky vrací string, i když načítáš číslo, tak ti ho stejně vráti jako string třeba "123",

A až potom si ten string převedeš do správného typu čísla dle potřeby, buď s pomocí zmíněné metody
Convert.ToInt32, a nebo Int32. Parse(string).. Tam se v podstatě nedá co zkazit, ta chyba kterou tam někde máš je způsobená spíš tou prací se stringem - viz Substring patrně se tam někde dostáváš mimo platné indexy (začátek a konec toho stringu), ale to si musíš odladit, odkrokovat řádek po řádku, než na to přijdeš. .

Možná kdyby ti to pomohlo, místo té metody Convert.ToInt32,resp. Int32. Parse(string) se dá použít Int32.TryParse-ale podívej se přesně na formát parametrů. Ta ti nespadne na vyjímku - ale vrátí false pokud se ten string nedá převést na číslo. Čili pak si to můžeš v podmínce zkontrolovat a třeba vypsalt v Messageboxu.

Jo vlastně ještě jedna věc, existuje zajímavá metoda String.Split(), která ti sama dokáže rozdělit ten string dle oddělovačů, zkus jestli by ti to celý problém nevyřešilo.

Nahlásit jako SPAM
IP: 2a00:1028:9193:38da:565:f...–
TD
~ Anonymní uživatel
28 příspěvků
26. 3. 2016   #5
-
0
-

Diky moc :) hned jak bude možnost tak to otestujem :) Len ono to posilam z mikrokontroleru takže ono može tam byt nejak EMC tak skorej by to chcelo že ked temu dojde špatny řetezec tak to odignoruje a počka to kym dojde nejaky spravny :) takto ked to debuguju tak v pohode a ked to pustim tak to vynimkama zamrne :/

Nahlásit jako SPAM
IP: 178.41.199.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 10 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý