Avatar
MadaraCZech
Redaktor
Avatar
MadaraCZech:

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]:

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]:

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:

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
Avatar
Odpovídá na MadaraCZech
Petr Čech (czubehead):

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  +2 19.8.2015 17:35
Why so serious? -Joker
Avatar
MadaraCZech
Redaktor
Avatar
Odpovídá na Petr Čech (czubehead)
MadaraCZech:

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ý:

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

 
Nahoru Odpovědět  +1 19.8.2015 18:33
Avatar
MadaraCZech
Redaktor
Avatar
 
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.