Diskuze: Pridanie čísiel k zoznamu obrázkov aby som potom písal len čísla
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 19 zpráv z 19.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Když si názvy souborů uložíš do pole, můžeš se na ně odkazovat
prostřednictvím indexu tohoto pole.
Požadované podoby seznamu dosáhneš výpisem indexu s tečkou a hodnoty na
daném indexu.
vytvoříš si třídu t_Files do které umístíš 2 proměnné a musí být
public, první typu Int32 a druhou typu String.
a pak si v tom tvým programu vytvoříš List<t_Files> files = new
List<t_Files>
a pak už jenom přidáváš záznamy do Listu:
t_Files item = new t_Files()
jmeno = "dedo.bmp";
cislo = 1;
files.Add(item)
a tak dále ..
a nakonci nezapomeneš ten list zmazat
files = null;
Můžeš nahradit foreach cyklus, který ti vypisuje jména souborů do konzole, normálním for cyklem. Do
Console.WriteLine(files.Name.ToString())
ještě před
files.Name.ToString()
přidáš:
i + ": " +
To ti před každý soubor přidá číslo s dvojtečkou.
Pak si přes Console.ReadLine() načteš zadané číslo. Ještě by bylo dobré
ošetřit, jestli uživatel zadal platné číslo a jestli je číslo v rozsahu
0 - ImageFiles.Length. Potom pro získání jména souboru použiješ
ImageFiles[zadaneCislo].Name
(popř. FullName pokud chceš celou adresu.
Taky by jsi měl, pokud to jde, odstranit složené závorky nad
string ImageFilesRead = Console.ReadLine();
a nad
DirectoryInfo ImageDir = new DirectoryInfo("images");
protože proměnná ImageFiles mimo ně neexistuje.
Tak som to skúšal, ale všetky obrázky majú pred sebou číslo 0, ked to zmením na for (int i = 0; i < 5; i++) Tak sa obrázky očíslujú sprvávne, ale sú tam 5x po sebe.
//Vypíše zoznam súborov ktoré sa nachádzajú v priečinku images------------------------
DirectoryInfo ImageDir = new DirectoryInfo("images");
FileInfo[] ImageFiles = ImageDir.GetFiles();
Console.WriteLine("List of images:");
foreach (FileInfo files in ImageFiles)
for (int i = 0; i < 1; i++)
{
Console.WriteLine(i + ": " + files.Name.ToString());
}
//------------------------------------------------------------------------------------
int ImageFilesRead = Console.Read();
//nakopíruje zvolený obrázok-------------------------------------------------
if (File.Exists(Source + "\\images" + "\\" + ImageFiles[ImageFilesRead].Name))
{
Copy(Source + "\\images" + "\\" + ImageFiles[ImageFilesRead].Name, Destination + "\\" + ImageFiles[ImageFilesRead].Name);
Console.WriteLine("Image has been changed.");
}
//------------------------------------------------------------------------------------------
To chování, které program vykazuje jak popisuješ, je logické. Foreach provádí traversování celého pole už samo o sobě. Pokud do něj ještě zanoříš klasický for cyklus, budeš tak provádět nad každým indexem počet iterací rovno počtu iterací, na který máš for cyklus nastaven. Jelikož potřebuješ pracovat s indexy, použij pouze samotný for cyklus.
No ano ja som si aj myslel že to tam takto na 2x nebude dobre,ale ked vymažem foreach (FileInfo files in ImageFiles) tak mi tento riadok Console.WriteLine(i + ": " + files.Name.ToString()); na files.Name.ToString() hádže chybu a neviem ako to spraviť.
Omlouvám se, přehlédl jsem to. Místo files.Name.ToString() se musí použít ImageFiles[i].Name.ToString(). Nyní už by to foreach cyklus nemělo potřebovat. files je totiž aktuální proměnná foreach cyklu. Když ho ale nepoužíváme, musíme k souborům přistupovat pomocí indexu.
Ja som skúšal ImageFiles.Name.ToString() a hádzalo mi to tiež chybu ale
bol som blízko 
Žial ani ImageFiles[i].Name.ToString() čo si mi teraz napísal nefunguje.
Hádže to chybu na Name
the name "Name" does not exist in current context syntax error
Tak som si poradil malo to byť takto ImageFiles[i].Name bez toho To String.
Vyskytol sa mi však ďalší problém. Napísal som
for (int i = 0; i < 100; i++) aby som tam mal dosť velkú rezervu no aj ked
napíšem (int i = 0; i < 5; i++) a obrázky v priečinku sú 4 tak to hodí
chybu. A další problém že ked napíšem do konzoly 2 čo by som tak chcel
zvolit ten obrázok a stlačím enter tak to tiež vypíše chybu.
Tak som našiel odpoved na internete má to byť int ImageFilesRead = Convert.ToInt32(Console.ReadLine());
Když přistupuješ ok prvkům pole pomocí [i] a i je větší než počet prvků v poli tak to vyhodí chybu. Do for cyklu můžeš dát jako délku cyklu ImageFiles.Length což je délka pole. Pak už by ti to chybu vyhodit nemělo.
Ahoj,
původní kód by stačilo doplnit následujícím způsobem
//tvůj kód z prvního příspěvku...
int idx = 1; //pořadové číslo brázku
Console.WriteLine("List of images:");
foreach (FileInfo files in ImageFiles)
{
Console.WriteLine(string.Format("{0}. {1}", idx, files.Name.ToString()));
idx++; //navýšení proměnné
}
nebo lze nahradit cyklus foreach za for
FileInfo file;
for (int i = 0; i < ImageFiles.Length; i++)
{
file = ImageFiles[i];
Console.WriteLine(i + ": " + files.Name.ToString());
}
Dakujem už to funguje. Trochu ma mätie ten ImageFiles.Length což je délka
pole. Nechápem tej dĺžke pola. Ono to v skutočnosti je kolko súborov sa
nachádza v priečinku nie? A to by som si s dĺžkou pola sám nespojil.
Takže mám to chápať tak že dĺžka pola je vlastne počet objektov v tom
poli?
Funkce ImageDir.GetFiles(); vezme všechny položky v dané složce a uloží jejich jména a další info do pole prvků typu FileInfo. Délka tohoto pole je tedy počet souborů ve složce.
Je třeba to pochopit, nikoli si to pamatovat.
Je to obdobné jako počet argumentů zadaných na příkazovém řádku za názvem souboru při spuštění programu.
Např. v jazyce C, vstupní funkce main(), schopna přijímat argumenty zadané na příkazovém řádku, má následující tvar:
int main(int argc, char *argv[])
Druhý parametr je pole znakových ukazatelů. Jinak řečeno pole ukazatelů na řetězec. Každý řetězec je samostatná jednotka a velikost tohoto pole (první argument) je právě počet těchto řetězců.
Proto velikost pole odpovídá počtu souborů ve složce.
Zobrazeno 19 zpráv z 19.
