Avatar
milan.w
Neregistrovaný
Avatar
milan.w:

Zdravím, potřeboval bych poradit

udělal jsem program, který uloží pole intů do *.txt souboru a ted bych ten soubor potřeboval načíst jiným programem. Načíst to umím pomocí streamreaderu a umím to vypsat jako string:

public void NactiCisla(string path)
{
StreamReader sr = new StreamReader(path);
string s = sr.ReadToEnd();
sr.Close();

Console.Write­Line(s);
}

ale potřeboval bych to převést zpět na čísla a zadat do pole a nevím jak na to.

 
Odpovědět 8.5.2013 21:23
Avatar
Theodor Johnson
Redaktor
Avatar
Odpovídá na milan.w
Theodor Johnson:

má to jeden nebo víc řádků?

Nahoru Odpovědět 8.5.2013 21:29
Přecházím na "Cross-Platform Development"
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na milan.w
Petr Nymsa:

Pokud to bylo jednorozměrné pole, stačí projet ten string znak po znaku a každý znak převést na int zpět a uložit do pole int.

Nahoru Odpovědět 8.5.2013 21:31
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Theodor Johnson
Redaktor
Avatar
Theodor Johnson:

u vícerozměrnýho to jde stejně, akorát je třeba ohlídat aby každej řádek měl stejnej počet intů

Nahoru Odpovědět 8.5.2013 21:32
Přecházím na "Cross-Platform Development"
Avatar
Michal Žůrek (misaz):

nejlepší je to už při ukládáni všechno něčím oddělit (třeba i mezerou). Pak to rozsplituješ

String[] meziPole = mujString.Split(" ");

no a pak to na parsruješ:

int[] hotovePole
for (int i = 0; i < meziPole.Length; i++)
{
   hotovePole[i] = Int.Parse(meziPole[i]);
}
Nahoru Odpovědět 8.5.2013 21:33
Nesnáším {}, proto se jim vyhýbám.
Avatar
milan.w
Neregistrovaný
Avatar
Odpovídá na Theodor Johnson
milan.w:

je to jen jeden řádek, jednorozměrné pole

 
Nahoru Odpovědět 8.5.2013 21:33
Avatar
milan.w
Neregistrovaný
Avatar
milan.w:

moc děkuju za pomoc

 
Nahoru Odpovědět 8.5.2013 21:36
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na milan.w
Petr Nymsa:

Důležité je, jestli chápeš jak vše funguje ? :) Bez pochopení a jenom hloupého opsání si nepomůžeš ;)

Nahoru Odpovědět 8.5.2013 21:39
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
milan.w
Neregistrovaný
Avatar
milan.w:

já se to samozřejmě snažim pochopit a zprovoznit, ale píše mi to že vstupní řetězec nemá správný formát, nevim kde mam chybu:

public int[] NactiCisla(string path)
{

StreamReader sr = new StreamReader(path);
string s = sr.ReadToEnd();
sr.Close();
string[] meziPole = s.Split(' ');
int[] pole = new int[meziPole.Len­gth];

for (int i = 0; i < meziPole.Length; i++)
{
pole[i] = int.Parse(mezi­Pole[i]);
}

return pole;
}

 
Nahoru Odpovědět 8.5.2013 22:20
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na milan.w
Jiří Gracík:

Napiš nám co je ve stringu path :)

Nahoru Odpovědět 9.5.2013 7:02
Creating websites is awesome till you see the result in another browser ...
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na milan.w
David Čápka:

To ti padá na tom parse, protože parsuješ něco, co není číslo. Nech si to pole vypsat, jsou v něm nějaké blbosti.

Nahoru Odpovědět 9.5.2013 9:28
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
milan.w
Neregistrovaný
Avatar
milan.w:

path je cesta k tomu souboru s čísly, který mam uložený v pc, když si necham vypsat to pole, tak mi to píše 0, asi to špatně načítam z toho souboru, mam tam uložených 10 čísel a jsou odděleny mezerou, tak nevim

 
Nahoru Odpovědět 9.5.2013 10:24
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na milan.w
David Čápka:

Jak ti může výpis pole vypsat 0?

Nahoru Odpovědět 9.5.2013 10:36
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
milan.w
Neregistrovaný
Avatar
milan.w:

to netušim, já pořádně nevim jak se to split používá, nejspíš tam mam někde chybu

 
Nahoru Odpovědět 9.5.2013 10:52
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na milan.w
David Čápka:

Nenapadlo tě nechat si to s vypsat předtím, než ho necháš Splitovat? A potom si nechat vypsat to tvé mezipole?

Nahoru Odpovědět 9.5.2013 10:56
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na milan.w
Kit:

Pokud je to stálé pole 10 intů, nedalo by se to načíst jedním standardním příkazem? Ve Fortranu se to dělávalo naprosto běžně, pochybuji, že by to dnešní jazyky neuměly.

Nahoru Odpovědět 9.5.2013 11:05
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na milan.w
Kit:

Našel jsem tento příklad, ale neověřoval jsem ho. Zkus to:

string foo = "0 0 1 22 39 0 0 1 2 33 33";
int[] data = foo.Split(' ').Select(p => int.Parse(p)).ToArray();
Nahoru Odpovědět 9.5.2013 11:17
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
milan.w
Neregistrovaný
Avatar
milan.w:

to sdraco

to jsem udělal jako první, nechal jsem si to s vypsat, vypisuje se to správně, vypíše čísla oddělená mezerou :2 3 5 4 ...

to Kit - zkusím to, díky

 
Nahoru Odpovědět 9.5.2013 11:33
Avatar
milan.w
Neregistrovaný
Avatar
milan.w:

děkuju všem za pomoc, už mi to běží

public void NactiCisla(string path)
        {

            StreamReader sr = new StreamReader(path);
            string s = sr.ReadToEnd();
            sr.Close();
            string[] meziPole = s.Split(' ');
            int[] pole = new int[meziPole.Length-1];
            for (int i = 0; i < meziPole.Length-1; i++)
                pole[i] = int.Parse(meziPole[i]);

            foreach (int a in pole)
                Console.Write("{0}", a);

        }
 
Nahoru Odpovědět 9.5.2013 12:04
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na milan.w
David Čápka:

To je stejně pořád nějaké divné. IMHO máš za posledním číslem v souboru mezeru (což je špatně) a proto ti Split() vrátí pole o 1 delší. Ty jsi ho teď uměle zkrátil, ale chyba je v zápisu, kde nemá ta mezera být. Dá se to také opravit tak, že dáš metodě Split další parametr, kde specifikuješ, že se mají ignorovat prázdné položky.

Nahoru Odpovědět 9.5.2013 14:34
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
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 20 zpráv z 20.