Diskuze: C#, operace se stringem
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 15 zpráv z 15.
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.
Kolik těch souborů je? To číslo má vždycky stejný počet číslic? Když by se všechno potom jmenovalo "soubor.txt", jak je odlišíš?
Souborů jsou stovky, ano má to vždy stejný počet pozic.
Soubory se jmenují různě a obsahují všemožné znaky. Pouze to "_conflict-20150402-122951" má vždy stejný počet znaků.
V tom případě by se to dalo spočítat, od kterého znaku se má udělat replace. Zjistíš si celkový počet znaků od toho odečteš "ten" počet znaků a uděláš replace.
Taky mě to napadlo, ale nevím jak přesně na to, poradíš jak to přesně spočítat a jak to potom odečíst a zobrazit?
Mohl by si udělat příklad na tomto stringu "ukol45_v3_conflict-20150402-122951.txt"?
Ano, přejmenovat část názvu, který jsem si převedl do stringu. Stačí mi jen rada jak pracovat se stringem.
string nazev = "ukol45_v3_conflict-20150402-122951.txt";
int pocetznaku = nazev.Length; //celkový počet znaků
int odebrat = 29; //počet znaků, které chci odebrat
int pocatek = nazev.Length - 29; //zjistit, odkud začnu odebírat
string novynazev = nazev.Remove(pocatek, 29) + ".txt";
v programu bych to samozřejmě zkrátil, tady je to "polopaticky"...
výsledek: ukol45_v3.txt
Tak ono obecně jde se stringem dělat cokoliv. Tobě by se mohly hodit metody .Insert(), která na zvolenou pozici vloží string a .Remove(), která od zvolené pozice umaže zvolenou část stringu..
string staryNazev = @"C:\..\_conflict-20150402-122951.txt"; // prostě nějaká url na soubor
string novyNazev = String.Empty;
int pozice = staryNazev.LastIndexOf("_conflict-");
novyNazev = staryNazev.Remove(pozice + 10, 15);
novyNazev = novyNazev.Insert(pozice + 10, "novaCisla");
File.Move(staryNazev, novyNazev);
Přes LastIndexOf() si zjistím index ve stringu, kde se vyskytuje string "_conflict-", pak na zvolené pozici, kde se zvolený string nacházel přičtu jeho délku (10), abych umazával až za názvem "_conflict-" a smažu 15 znaků, což jsou jen ta tvoje čísla.. pak už jen stačí na onu pozici přes insert vložit co chci a přes File.Move provést přejmenování souboru..
Skus toto:
string nejakaPremenna = nazev.Split('_')[0].Split('.')[1];
Všem díky za pomoc.
To nejlepší řešení je od rwn, pomohlo mi pochopení funkce
LastIndexOf, to bylo to hlavní pro zdárné řešení.
výsledek vypadá takto:
string novyNazev = String.Empty;
if (file.Name.Contains("_conflict") == true)
{
int pozice = file.Name.LastIndexOf("_conflict");
novyNazev = file.Name.Remove(pozice, 25);
Console.WriteLine(novyNazev);
}
else
Console.WriteLine(file.Name);
Kdyby náhodou někoho zajímal celý program, tak zde ho přikládám:
static void Main(string[] args)
{
string cesta = @"c:\_DATA";
ListFiles(cesta);
Console.ReadLine();
}
static void ListFiles(string path)
{
DirectoryInfo directoryInfo= new DirectoryInfo(path);
if(directoryInfo.Exists)
{
FileInfo[] fileInfo= directoryInfo.GetFiles();
DirectoryInfo[] subdirectoryInfo = directoryInfo.GetDirectories();
foreach (DirectoryInfo subDirectory in subdirectoryInfo)
{
ListFiles(subDirectory.FullName);
}
foreach(FileInfo file in fileInfo)
{
if (file.Length == 0)
{
bool exists = Directory.Exists(file.DirectoryName.Replace(@"c:\", @"c:\cisteni\"));
if (!exists)
Directory.CreateDirectory(file.DirectoryName.Replace(@"c:\", @"c:\cisteni\"));
File.Move(file.FullName, Path.Combine(file.DirectoryName.Replace(@"c:\", @"c:\cisteni\"), file.Name));
Console.WriteLine(file.FullName);
}
else
{
string novyNazev = String.Empty;
if (file.Name.Contains("_conflict") == true)
{
int pozice = file.Name.LastIndexOf("_conflict");
novyNazev = file.Name.Remove(pozice, 25);
Console.WriteLine(novyNazev);
File.Move(file.FullName, Path.Combine(file.DirectoryName, novyNazev));
}
else
Console.WriteLine(file.Name);
}
}
}
}
Zobrazeno 15 zpráv z 15.
