Programátorská sociální síť a materiálová základna pro C#, Java, PHP, HTML, CSS, JavaScript a další.

Přihlásit se Registrace  
03.06.2012 19:26:10
Avatar
matesax
Redaktor
DotDotDotDotDotDotDotDotDotDot

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.

03.06.2012 19:29:44
Avatar
matesax
Redaktor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na 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,...

03.06.2012 20:15:30
Avatar
David Jančík (sczdavos)
Moderátor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na matesax

Zkus:

Replace("\ncestaksouboru", "");
Odpovědět   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
03.06.2012 20:25:15
Avatar
matesax
Redaktor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na David Jančík (sczdavos)

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í.

03.06.2012 20:29:01
Avatar
David Jančík (sczdavos)
Moderátor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na matesax

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   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
03.06.2012 20:31:12
Avatar
matesax
Redaktor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na David Jančík (sczdavos)

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

03.06.2012 20:36:24
Avatar
David Jančík (sczdavos)
Moderátor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na matesax

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   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
03.06.2012 20:41:32
Avatar
matesax
Redaktor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na David Jančík (sczdavos)

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,... :)

03.06.2012 20:49:51
Avatar
David Jančík (sczdavos)
Moderátor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na matesax

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   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
03.06.2012 20:58:38
Avatar
matesax
Redaktor
DotDotDotDotDotDotDotDotDotDot
03.06.2012 21:02:11
Avatar
David Jančík (sczdavos)
Moderátor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na matesax

Zkus

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

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

03.06.2012 21:12:49
Avatar
David Jančík (sczdavos)
Moderátor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na matesax

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   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
03.06.2012 21:13:38
Avatar
matesax
Redaktor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na David Jančík (sczdavos)

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

03.06.2012 21:15:31
Avatar
matesax
Redaktor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na David Jančík (sczdavos)

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

03.06.2012 21:45:43
Avatar
David Jančík (sczdavos)
Moderátor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na matesax

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   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
03.06.2012 21:47:39
Avatar
David Jančík (sczdavos)
Moderátor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na matesax

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   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
03.06.2012 21:56:31
Avatar
matesax
Redaktor
DotDotDotDotDotDotDotDotDotDot
03.06.2012 22:16:05
Avatar
matesax
Redaktor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na David Jančík (sczdavos)

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.

03.06.2012 22:21:01
Avatar
David Jančík (sczdavos)
Moderátor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na matesax

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

if (line != one)

Ale

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

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

04.06.2012 05:15:57
Avatar
matesax
Redaktor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na matesax

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

04.06.2012 05:16:39
Avatar
matesax
Redaktor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na matesax

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

04.06.2012 06:46:36
Avatar
David Jančík (sczdavos)
Moderátor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na matesax

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   i++; | i--;
Čím více času dostaneš, tím méně ho máš.
04.06.2012 14:36:51
Avatar
matesax
Redaktor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na David Jančík (sczdavos)

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. :)

06.06.2012 16:33:21
Avatar
matesax
Redaktor
DotDotDotDotDotDotDotDotDotDot

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),...

06.06.2012 16:37:47
Avatar
matesax
Redaktor
DotDotDotDotDotDotDotDotDotDot
Odpovídá na 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,...

 

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.