Diskuze: načítání ze souboru C#
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Neregistrovaný

Zobrazeno 20 zpráv z 20.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
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.
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ů
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]);
}
Důležité je, jestli chápeš jak vše funguje ? Bez pochopení a jenom hloupého
opsání si nepomůžeš
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.Length];
for (int i = 0; i < meziPole.Length; i++)
{
pole[i] = int.Parse(meziPole[i]);
}
return pole;
}
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.
Nenapadlo tě nechat si to s
vypsat předtím, než ho necháš
Splitovat? A potom si nechat vypsat to tvé mezipole?
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.
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();
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);
}
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.
Zobrazeno 20 zpráv z 20.