dodání ihned! nové
Pouze tento týden sleva až 80 % na e-learning týkající se PHP. Zároveň využij akce až 30 % zdarma při nákupu e-learningu. Více informací.
Hledáme programátora do rostoucího týmu ITnetwork.cz, 100% home office, 100% flexibilní pracovní doba. Více informací
PHP week

Diskuze: Problém s vymazáním řádku

Aktivity
Avatar
MadaraCZech
Redaktor
Avatar
MadaraCZech:19.8.2015 2:09

Zdravím,

mám tu kód, který má vymazat prvních pět řádků v souboru. Ale vyhazuje chybu, že index musí být nezáporný a musí být menší než velikost kolekce.

Kód :

file.RemoveAt(0);
                file.RemoveAt(1);
                file.RemoveAt(2);
                file.RemoveAt(3);
                file.RemoveAt(4);
                File.WriteAllLines("bazar.data", file.ToArray());

soubor bazar :

asd
111
adresa1
adresa2
adresa3

Neví někdo, co s tím ?
Díky.

 
Odpovědět
19.8.2015 2:09
Avatar
Odpovídá na MadaraCZech
Jakub Lásko[Saarix]:19.8.2015 6:37

Co za proměnnou je přesně ten file? Že tam používáš metodu RemoveAt, která je dostuná na Listu.

K mazání řádků v souboru bych to udělal tak, že soubor načtu, pak v něm vymažu řádky a ten noý uložím. Máš to docela podobně.

List<string> lines = new List<string>();
            using (StreamReader reader = new StreamReader("File"))
            {
                int lineNumber = 0;
                while (!reader.EndOfStream)
                {
                    lineNumber++;
                    string line = reader.ReadLine();

                    if (lineNumber > 5)
                        lines.Add(line);
                }
            }

            using (StreamWriter writer = new StreamWriter("File"))
            {
                foreach (string line in lines)
                    writer.WriteLine(line);
            }

            // Nebo
            File.WriteAllLines("File", lines.ToArray());

To řešení sem teď splácnul narychlo, ale mělo by fungovat, jako idea by to mělo posloužit. :-)

Nahoru Odpovědět
19.8.2015 6:37
Časem je vše možné.
Avatar
Odpovídá na MadaraCZech
Jakub Lásko[Saarix]:19.8.2015 6:38

Je doplnění: Zkonstroluj si v breakpointem, jestli před tím RemoveAt, je vůbec něco v té proměnné file.

Nahoru Odpovědět
19.8.2015 6:38
Časem je vše možné.
Avatar
MadaraCZech
Redaktor
Avatar
Odpovídá na Jakub Lásko[Saarix]
MadaraCZech:19.8.2015 16:54

file :

var file = new List<string>(System.IO.File.ReadAllLines("bazar.data"));

Chybu to vyhazuje u file.RemoveAt(3);

Kód chci měnit co nejméně.

 
Nahoru Odpovědět
19.8.2015 16:54
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na MadaraCZech
Petr Čech:19.8.2015 17:35

Jde o to, že v momentě, kdy smažeš string na indexu 0, posune se tam ten, co byl předtím na 1, takže musíš udělat něco jako tohle:

for(int i=0;i<5;i++)
{
   file.RemoveAt(0);
}

potom samozřejmě uložit a pod, tohle jen smaže stringy z listu.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět
19.8.2015 17:35
the cake is a lie
Avatar
MadaraCZech
Redaktor
Avatar
Odpovídá na Petr Čech
MadaraCZech:19.8.2015 18:32

Jo, díky, nakonec jsem využil jinou metodu, ale tohle jsem si taky uvědomil.

 
Nahoru Odpovědět
19.8.2015 18:32
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na MadaraCZech
Jan Vargovský:19.8.2015 18:33

Když jsou ty indexy zasebou, tak stačí RemoveRange.

 
Nahoru Odpovědět
19.8.2015 18:33
Avatar
MadaraCZech
Redaktor
Avatar
Odpovídá na Jan Vargovský
MadaraCZech:19.8.2015 18:35

Ano, tohle jsem udělal.

 
Nahoru Odpovědět
19.8.2015 18:35
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 8 zpráv z 8.