Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: načítání ze souboru C#

C# .NET .NET (C# a Visual Basic) načítání ze souboru C# American English version English version

Aktivity (1)
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
Redaktor
Avatar
Odpovídá na milan.w
Theodor Johnson:8.5.2013 21:29

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: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
Redaktor
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
Přecházím na "Cross-Platform Development"
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
Nesnáším {}, proto se jim vyhýbám.
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
Redaktor
Avatar
Odpovídá na milan.w
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
Jiří Gracík
Redaktor
Avatar
Odpovídá na milan.w
Jiří Gracík:9.5.2013 7:02

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: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
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: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 Čápka
Tým ITnetwork
Avatar
Odpovídá na milan.w
David Čápka:9.5.2013 10:36

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: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 Čápka
Tým ITnetwork
Avatar
Odpovídá na milan.w
David Čápka: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
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: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
Redaktor
Avatar
Odpovídá na milan.w
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 Čápka
Tým ITnetwork
Avatar
Odpovídá na milan.w
David Čápka: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
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.