Rich Text Box a prechod na ďaľší riadok   zodpovězená otázka

VB.NET, WinForms

Dobrý deň.

Pracujem na programe, ktorý robí konverziu z jedného typu súboru do iného typu súboru. Využívam pri to Rich Text Box. Program prechádza každým jedným znakom súboru a znaky, ktoré v novom súbore nemajú byť jednoducho odstraňuje. Narazil som však na problém. Zadefinoval som do programu, aby ignoroval reťazec čiarka a reťazec prechod na ďaľší riadok. Čiarku mi program ignoruje, tak ako má, ale prechod na ďaľší riadok (vbCrLf) mi nechce ignorovať. Do nového reťazca mi pridá znak prázdny štvorček. Pritom vbCrLf majú byť štvorčeky dva. Neviem, čo mám zadať do podmienky, aby mi program ignoroval prechod na ďaľší riadok. Pre príklad uvádzam časť súboru, ktorý sa má skonvertovať a rozhodovaciu časť zdrojového kódu. Prosím o radu, ako to urobiť. Ďakujem.

Súbor pre konverziu:

SID,,01071665

STYPE,,TYPE1

STDATE,,5/29/2007 11:22:47 AM

SPR1,16.90003,17.78335,18.69997

SPR2,16.90003,17.76902,18.69997

Dim file As String
        Dim NumOfChars As Integer
        Dim ActualString As String = ""
        file = ListBox1.SelectedItem.ToString()
        convertBox.LoadFile(file, RichTextBoxStreamType.PlainText)
        For NumOfChars = 0 To convertBox.TextLength - 1
            convertBox.Select(NumOfChars, 1)
            ActualString = convertBox.SelectedText.ToString
            If ActualString = "," Or ActualString = vbCrLf Then

                TempString = TempString
                Call saveTempString()
            Else
                TempString = TempString & ActualString
            End If
            ActualString = ""
        Next NumOfChars


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

Nejpravděpodobněji jste se dostal k problému, že vbCrLf není jeden znak, ale jsou to dva znaky chr(13) & chr(10) , tudíž musíte aplikovat nahrazení těchto dvou znaků. Jinak místo takto složitého označování textu bych použil vlastnost RichTextBoxu Text, jenž můžete též projít po znacích a bude to i rychlejší, protože neproběhne pomalé grafické označování každého procházeného znaku.

Jako další možnost bych doporučil hromadné nahrazení textu pomocí funkce Replace.

V příkladě níže uvádím jak konverzi zpracovat i bez RichTextBoxu a bez zjišťování konců řádků. Je zde použito načtení souboru do pole Stringů, kde každá položka pole je jeden řádek souboru. Stačí tedy, aby za posledním znakem souboru byla provedena operace jako při hledání vbCrLf.

Dim file As String
Dim NumOfChars As Integer
Dim ActualString As String = ""
Dim LoadedFile() as String

file = ListBox1.SelectedItem.ToString()
LoadedFile = IO.File.ReadAllLines(file)

For i As Integer = 0 To UBound(LoadedFile)
    For NumOfChars = 0 To Line.Length -1
        ActualString = Line.Chars(NumOfChars).ToString()
        If ActualString = "," then
            TempString = TempString
            Call saveTempString()
        Else
            TempString = TempString & ActualString
        End If
        ActualString = ""
    Next
    ' po kontrole znaků v řádku přidáme operaci konce řádku
    ' pokud se nejedná o poslední řádek, který nemá zalomení
    If i <> UBound(LoadedFile) Then
        TempString = TempString
        Call saveTempString()
    End If
Next 

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

Ďakujem,

ale nefuguje mi to. Program vypisuje pri Line.Lenght-1 a pri Line.Chars ... hlásenie "Line" statements no longer supported. Inak už mi je jasné, že keď kontrolujem text po jednom znaku, nemôžem naraziť na vbCrLf. Vyskúšam Replace. Ešte raz vďaka.

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

Moc se omlouvám, mírně jsem kód měnil a zapoměl jsem změnit tenhle řádek. Místo Line.Length - 1 tam má být LoadedFile(i).Length - 1 .

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

No paráda.

Funguje to nádherne. Ďakujem za pomoc.

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