NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
JirkaX
Člen
Avatar
JirkaX:11.2.2017 17:06

Ahoj,

mám takový problém a nevím jak ho vyřešit:

Mám pole:

byte[] test = {11,65,66,67,­10,65,66,67,10,65,66,67,­10,10,10,10,10,10};

potřeboval bych ho rozparsovat do stringu následně:

11 = Identifikátor (vždy se musí rovnat 11 -> pokud se rovná něco jiného nepokračovat dále!)

to udělám podmínkou, tomu rozumím

if(test[0] == 11)
{

}

ale teď nastává problém a to v tom, že dokud nenarazím na číslo 10 tak byty 65,66,67 spojit do jednoho a převést na String kde by to mělo vypadat následně ABC (pokud se nepletu).

Může prosím někdo poradit? Díky

Editováno 11.2.2017 17:07
 
Odpovědět
11.2.2017 17:06
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na JirkaX
Jan Vargovský:11.2.2017 19:50

Moc tomu zadání nerozumím. To chceš jako něco takového?

if(i == 10) ?
else if(i == 11) zpracuj frontu
else přidej i do fronty

btw, originál zadání by byl asi lepší.

 
Nahoru Odpovědět
11.2.2017 19:50
Avatar
Roman Skultety:11.2.2017 20:03

Ahoj,
prikladam mozny parser, ktory predpoklada, ze je v poli test max 10 stringov, ked tak si uprav na viac při deklaracii:

string[] parsed = new string[10];
int counted = 0;

if (test[0] == 11)
{
    string single = "";
    int position = 1;
    while (position < test.Length)
    {
        if (test[position] == 10)
        {
            parsed[counted] = single;
            counted++;
            single = "";
        }
        else
        {
            single = single + (char)test[position];
        }
        position++;
    }
}

foreach (string s in parsed)
    Console.WriteLine(s);
Console.WriteLine("pocet retezcu = " + counted.ToString());
Console.ReadKey();
 
Nahoru Odpovědět
11.2.2017 20:03
Avatar
HONZ4
Člen
Avatar
HONZ4:11.2.2017 20:07

Když už jsem to napsal...

static void Main(string[] args)
        {
            byte[] test = new byte[] { 65, 66, 67, 10, 65, 66, 67, 10, 65, 66, 67, 10, 10, 10, 10, 10, 10 };

            if (test[0] == 11) Console.WriteLine("Identifikátor je 11!");
            else
            {
                string[] lines = ParseTextFromBytes(test);

                foreach (string line in lines) Console.WriteLine(line);
            }

            Console.ReadKey();
        }

        static string[] ParseTextFromBytes(byte[] bytes)
        {
            string str = System.Text.Encoding.GetEncoding(1250).GetString(bytes);
            return str.Split(new char[]{'\n'}, StringSplitOptions.RemoveEmptyEntries);
        }
Editováno 11.2.2017 20:10
 
Nahoru Odpovědět
11.2.2017 20:07
Avatar
HONZ4
Člen
Avatar
HONZ4:11.2.2017 20:21

pardon, já jsem to udělal obráceně. Oprava:

    byte[] test = new byte[] {11, 65, 66, 67, 10, 65, 66, 67, 10, 65, 66, 67, 10, 10, 10, 10, 10, 10 };

    if (test[0] != 11) Console.WriteLine("Identifikátor není 11!");
    else
    {
        string[] lines = ParseTextFromBytes(test);

        foreach (string line in lines) Console.WriteLine(line);
    }

    Console.ReadKey();
}

static string[] ParseTextFromBytes(byte[] bytes)
{
    string str = System.Text.Encoding.GetEncoding(1250).GetString(bytes);
    return str.Split(new char[]{'\n', '\v'}, StringSplitOptions.RemoveEmptyEntries);
}
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
11.2.2017 20:21
Avatar
JirkaX
Člen
Avatar
Odpovídá na HONZ4
JirkaX:12.2.2017 20:39

Děkuji, funguje bez chyby.

 
Nahoru Odpovědět
12.2.2017 20:39
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.