IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
milan.w
Neregistrovaný
Avatar
milan.w:8.5.2013 21:23

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
Tvůrce
Avatar
Odpovídá na
Theodor Johnson:8.5.2013 21:29

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

Nahoru Odpovědět
8.5.2013 21:29
Mo8ilε 15 Ѐλđ
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na
Petr Nymsa:8.5.2013 21:31

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
Tvůrce
Avatar
Theodor Johnson:8.5.2013 21:32

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
Mo8ilε 15 Ѐλđ
Avatar
Michal Žůrek - misaz:8.5.2013 21:33

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
Avatar
milan.w
Neregistrovaný
Avatar
Odpovídá na Theodor Johnson
milan.w:8.5.2013 21:33

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

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

moc děkuju za pomoc

 
Nahoru Odpovědět
8.5.2013 21:36
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na
Petr Nymsa:8.5.2013 21:39

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:8.5.2013 22:20

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
Odpovídá na
Neaktivní uživatel:9.5.2013 7:02

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

Nahoru Odpovědět
9.5.2013 7:02
Neaktivní uživatelský účet
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:9.5.2013 9:28

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
New kid back on the block with a R.I.P
Avatar
milan.w
Neregistrovaný
Avatar
milan.w:9.5.2013 10:24

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 Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:9.5.2013 10:36

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

Nahoru Odpovědět
9.5.2013 10:36
New kid back on the block with a R.I.P
Avatar
milan.w
Neregistrovaný
Avatar
milan.w:9.5.2013 10:52

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 Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:9.5.2013 10:56

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
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na
Kit:9.5.2013 11:05

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
Tvůrce
Avatar
Odpovídá na
Kit:9.5.2013 11:17

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:9.5.2013 11:33

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:9.5.2013 12:04

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 Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:9.5.2013 14:34

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
New kid back on the block with a R.I.P
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.