Smazat řádek v textovém souboru   zodpovězená otázka

VB.NET

Dobrý den,

můj problém bude patrně triviální, bohužel jsem ale nikde nenašla, jak ho vyřešit, proto se obracím o pomoc.

Mám textový soubor, ve kterém potřebuji vymazat konkrétní řádek.

Následující kód sice z řádku vymaže písmenka, ale řádek samotný nezmizí (zůstane prázdný a zabírá původní místo).

        Dim soubor As String = IO.File.ReadAllText("c:\text.txt")
        soubor = soubor.Replace(radek3, "") 'obsah radku 3 prepise na "nic"
        IO.File.WriteAllText("c:\text.txt", soubor)

Výsledný soubor pak vypadá takto:

řádek1

řádek2

řádek4

řádek5

Ale já potřebuju, aby vypadal takto:

řádek1

řádek2

řádek4

řádek5

(jednoduše bez toho prázdného místa po řádku č. 3)

Je nějaké řešení? Za případnou odpověď velmi děkuji.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ještě mě napadla otázka - jak smazat řádek bez ohledu na to, co je v něm napsané?

Pokud budu chtít výše zmíněným kódem smazat řádek č. 3, který bude obsahově stejný, jako řádek č. 5, tak se mi smažou oba řádky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zdravím,

sice by to šlo asi napsal lépe, ale já používám zhruba toto a taky to funguje :c)

        Dim Soubor As String = "d:\soubor.txt"
        Dim SouborTmp As String = Soubor & ".tmp"
        FileOpen(1, Soubor, OpenMode.Input, OpenAccess.Read)
        FileOpen(2, SouborTmp, OpenMode.Output, OpenAccess.Write)
        Dim X As Integer = 1
        While Not EOF(1)
            Dim Radek As String = LineInput(1)

            ' Když se načte vpořadí 3 řádek vynechá se
            If Not X = 3 Then PrintLine(2, Radek)

            X += 1
        End While
        FileClose(1)
        FileClose(2)
        FileIO.FileSystem.DeleteFile(Soubor)
        FileIO.FileSystem.RenameFile(SouborTmp, Soubor.Substring(Soubor.LastIndexOf("\") + 1))

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Zkuste odstranit

soubor = soubor.Replace(radek3 & VbCrLf,"")

zůstávají Vám tam konce řádků ...

Ale pokud víte už při načítání, co potřebujete odstranit, bylo by lepší načítat soubour po řádcích a ty které nechcete vynechat. Místo String použít System.Text.StringBuilder(), bude to rychlejší ...

http://www.vbnet.cz/clanek--61-vb_net_od...

J.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Děkuji za obě odpovědi. Vzhledem k časové tísni je pro mě to druhé řešení optimální. Děkuji.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback