Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: Odstranění textu - ale i s řádkem

C# .NET .NET (C# a Visual Basic) Odstranění textu - ale i s řádkem American English version English version

Aktivity (1)
Avatar
matesax
Redaktor
Avatar
matesax:3.6.2012 19:26

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 19:26
Avatar
matesax
Redaktor
Avatar
Odpovídá na matesax
matesax:3.6.2012 19:29

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

 
Nahoru Odpovědět 3.6.2012 19:29
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík:3.6.2012 20:15

Zkus:

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

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

 
Nahoru Odpovědět 3.6.2012 20:25
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík:3.6.2012 20:29

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

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

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

 
Nahoru Odpovědět 3.6.2012 20:31
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík:3.6.2012 20:36

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

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

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

 
Nahoru Odpovědět 3.6.2012 20:41
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík:3.6.2012 20:49

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.

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

http://ulozto.cz/…zM/pinet-zip

Ve formu2 na konci máš malý komentář. :)

 
Nahoru Odpovědět 3.6.2012 20:58
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík:3.6.2012 21:02

Zkus

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

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

 
Nahoru Odpovědět 3.6.2012 21:10
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík:3.6.2012 21:12

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.

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

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

 
Nahoru Odpovědět 3.6.2012 21:13
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík
matesax:3.6.2012 21:15

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

 
Nahoru Odpovědět 3.6.2012 21:15
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík:3.6.2012 21:45

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

Nahoru Odpovědět 3.6.2012 21:45
Čím více času dostaneš, tím méně ho máš.
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík:3.6.2012 21:47

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();
Nahoru Odpovědět 3.6.2012 21:47
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík
matesax:3.6.2012 21:56

Zdá se to být OK - děkuji.

 
Nahoru Odpovědět 3.6.2012 21:56
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík
matesax:3.6.2012 22:16

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.

 
Nahoru Odpovědět 3.6.2012 22:16
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík:3.6.2012 22:21

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

if (line != one)

Ale

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

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

 
Nahoru Odpovědět 4.6.2012 5:14
Avatar
matesax
Redaktor
Avatar
Odpovídá na matesax
matesax:4.6.2012 5:15

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

 
Nahoru Odpovědět 4.6.2012 5:15
Avatar
matesax
Redaktor
Avatar
Odpovídá na matesax
matesax:4.6.2012 5:16

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

 
Nahoru Odpovědět 4.6.2012 5:16
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na matesax
David Jančík:4.6.2012 6:46

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.

Nahoru Odpovědět 4.6.2012 6:46
Čím více času dostaneš, tím méně ho máš.
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Jančík
matesax:4.6.2012 14:36

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

 
Nahoru Odpovědět 4.6.2012 14:36
Avatar
matesax
Redaktor
Avatar
matesax:6.6.2012 16:33

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

 
Nahoru Odpovědět 6.6.2012 16:33
Avatar
matesax
Redaktor
Avatar
Odpovídá na matesax
matesax:6.6.2012 16:37

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

 
Nahoru Odpovědět 6.6.2012 16:37
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řihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 27 zpráv z 27.