Facebook RSS feed
Zveme vás v pátek 28.11. na pravidelný sraz komunity itnetwork.
Avatar
matesax
Redaktor
Avatar
matesax:

Dobrý den,
do textového souboru zapisuji cesty k souborům (pokaždé na nový řádek). V jedné funkci maži jednu z těchto cest. Dělám to pomocí text.Replace(cesta k souboru, "prázdný string"). Problém je, že mi tam zůstane prázdný řádek. Zbavit se řádků umím - ale ostatní musí zůstat žít. :) Tak jak na to jít? Děkuji.

 
Odpovědět 3.6.2012
Avatar
matesax
Redaktor
Avatar
Odpovídá na matesax
matesax:

Respektive prvně vytáhnu string ze souboru - v tom stringu nahradím tu cestu a pak přepíši textový soubor tímto stringem,...

 
Odpovědět 3.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

Zkus:

Replace("\ncestaksouboru", "");
Odpovědět 3.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

Děkuji - funguje to, ale má to háček. Když to otevřu, vše je OK, ale když spustím program - kde se přečte tento dokument streamreaderem, tak mi to v místě vymazání vyplivne prázdný řádek - který v dokumentu není.

 
Odpovědět 3.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

Ještě tam dej \r (záleží na kódování) dobrý je si zobrazit netisknutelné znaky v nějakém editoru.
Takže to bude:

Replace("\r\ncesta", "");

V linuxech je totiž jen \n pak je někde asi v macu jen \r a win mají \r\n. Měl by si to nějak hlídat, aby byly tyto varianty ošetřené. Protože když tam bude jen \n tak to nic nenahradí.

Odpovědět 3.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

Já jsem tam používal Environment.NewLine - tak zkusím prvně to - pak to /r a pak kdyžtak napíšu,...

 
Odpovědět 3.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

Jo Environment.NewLine vrací pro každý systém buď \r\n nebo \n podle platformy. Ale neošetříš tím vyjímky.

Odpovědět 3.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

Tak ono mi to funguje tak, že mi to nefunguje. :) Totiž sem tam to vynechá jméno z té cesty - vše se smaže kromě části/celého jména. A dokonce 2x mi tam zbylo i kus cesty,... :)

 
Odpovědět 3.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

Podívej se nejprve na ty netisknutelné znaky. A pošli kus toho zdrojáku.
Možná ještě zkus:

"cesta\r\n", ""

Dát to \r\n na konec.

Odpovědět 3.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

Zkus

string h = this.mainForm.Replace(cesta + Environment.NewLine, "");
Odpovědět 3.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

Zůstal mi konec cesty kterou jsem chtěl smazat a cesta, se kterou se nic neděje se znásobila,... :)

 
Odpovědět 3.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

Můžeš mi ukázat příkladné použití? Ukázku souboru, se kterého se čte a jaká data tedy procházejí přes tu fci co to má udělat a co je výstupem.

Odpovědět 3.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

A když to prohodím (zase nazpátek) - tak mi to ukouslo C z další cesty a s mazanou cestou to udělalo divy,... :)

 
Odpovědět 3.6.2012
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

No máš to v appdata- pokud jsi program zkoušel - vstupem a výstupem jsou jenom cesty k souborům (programům). Třeba:

C:\Users\Emachi­nes\Desktop\Mi­necrede 1.0 - beta version.exe
C:\Users\Emachi­nes\Desktop\Jan Neruda - Povídky malostranské- by Matěj Andrle.txt
C:\Users\Emachi­nes\Desktop\O­JOsoft Total Video Converter.lnk
C:\Users\Emachi­nes\Desktop\Kla­vír.exe
C:\Users\Emachi­nes\Desktop\Pro­tokol č. 6.odt
C:\Users\Emachi­nes\Desktop\cha­lupa.txt
C:\Users\Emachi­nes\Desktop\Ma­gicDisc.lnk
C:\Users\Public\Des­ktop\Nero StartSmart Essentials.lnk

 
Odpovědět 3.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

Tu metodu Replace sem trošku poupravil:

internal string Remove(string one)
        {
            string strFile = "";
            using (StreamReader sr = new StreamReader(new FileStream(appdata, FileMode.Open)))
            {
                string line;
                while ((line = sr.ReadLine()) != null)
                {
                    if (line != one)
                        strFile += line + Environment.NewLine;
                }
            }


            return strFile;
        }

Takhle ti nenastane problém s tím řádkováním. Tohle již vrací to co má.

Odpovědět 3.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

A pak už jenom:

string h = this.mainForm.Remove(cesta);

            using (StreamWriter sw = new StreamWriter(new FileStream(this.mainForm.appdata, FileMode.Create)))
            {
                sw.Write(h);
            }
            this.Close();
Odpovědět 3.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
 
Odpovědět 3.6.2012
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

Tak ještě small OT - pro pohodlnost uživatelů sem dal možnost změnit odkaz formu2 - stačí přetáhnout program na form2 a on ihned začne odkazovat na tento program. Jenomže tak tedy mmusím přepsat save.dat - a tam mi zase zůstávají útržky cest + blbne nová řádka - pro zapisování dalších cest:
http://ulozto.cz/…DW/pinet-zip

Děkuji za pomoc.

 
Odpovědět 3.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

Použiješ stávající metodu remove. Nebude tam

if (line != one)

Ale

if (line == one)
strFile += two + Environment.NewLine;
Odpovědět 3.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

Z tohoto:
C:\Users\Emachi­nes\Desktop\Mi­crosoft-Visual-Studio-2010-Ultimate-V10.0.30319.1.iso
C:\Users\Emachi­nes\Desktop\Bou­nci star.zip
C:\Users\Emachi­nes\Desktop\Pi­net.zip
C:\Users\Emachi­nes\Desktop\Kru­tá cesta životem v1.1.exe
mi po nahrazení 3. cesty vzniklo toto:
C:\Users\Emachi­nes\Desktop\O­JOsoft Total Video Converter.lnk
imate-V10.0.30319.1.iso
C:\Users\Emachi­nes\Desktop\Bou­nci star.zip
C:\Users\Emachi­nes\Desktop\Pi­net.zip
C:\Users\Emachi­nes\Desktop\Kru­tá cesta životem v1.1.exe

 
Odpovědět 4.6.2012
Avatar
matesax
Redaktor
Avatar
Odpovídá na matesax
matesax:

Tu třetí cestu jsem nahradil tímto:
C:\Users\Emachi­nes\Desktop\O­JOsoft Total Video Converter.lnk

 
Odpovědět 4.6.2012
Avatar
matesax
Redaktor
Avatar
Odpovídá na matesax
matesax:

Nahradil jsem Pinet - který tam očividně je,...

 
Odpovědět 4.6.2012
Avatar
Odpovídá na matesax
David Jančík (sczdavos):

Toto nejde?

internal string Replace(string one, string two = null)
{
       string strFile = "";
       using (StreamReader sr = new StreamReader(new FileStream(appdata, FileMode.Open)))
       {
               string line;
               while ((line = sr.ReadLine()) != null)
               {
                       if (line != one)
                               strFile += line + Environment.NewLine;
                       else if (two != null)
                               strFIle += two + Environment.NewLine;
               }
       }


       return strFile;
}

Druhý parametr je nepovinný. Tj. pokud jej nezadáš bude to mazat, pokud zadáš mělo by to replacovat.

Odpovědět 4.6.2012
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík (sczdavos)
matesax:

Ještě jsem tam použil StringReader - pro nahrazení textu v textboxu a vše se tváří býti v pořádku. Děkuji za pomoc. :)

 
Odpovědět 4.6.2012
Avatar
matesax
Redaktor
Avatar
matesax:

Asi se z toho zcvoknu - měl jsem několik písniček a jednu složku - vše jsem odebral - a mělo se to tedy vymazat - ale ono zbylo:

s\Emachines\Mu­sic\Requim-for-a-dream-soundtrack---requiem-for-a-dream-.mp3
track---requiem-for-a-dream-.mp3
r-a-dream-soundtrack---requiem-for-a-dream-.mp3
track---requiem-for-a-dream-.mp3
ndtrack---requiem-for-a-dream-.mp3
track---requiem-for-a-dream-.mp3

Requiem For A Dream jsem měl jenom jednou(vícekrát to ani nejde),...

 
Odpovědět 6.6.2012
Avatar
matesax
Redaktor
Avatar
Odpovídá na matesax
matesax:

Ono to bude mít souvislost s mým dalším tématem - všechny formy 2 jsou aktivní - v tom vidím problém. Prý by to mělo vyřešit to řešení přes container. Takže prvně zkusím to,...

 
Odpovědět 6.6.2012

 

Zobrazeno 27 z 27 zpráv

Přidat novou zprávu

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řihlaš. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.