Daten aus rtf-Datei auslesen

  • VB.NET

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von Serpifeu7.

    Daten aus rtf-Datei auslesen

    Hallo zusammen,

    ich habe eine *.rtf - Datei in die ich Text aus RichTextBoxen reinschreibe, nun soll mein Programm diese Daten nach Anforderung auch wieder in die richtige Box einlesen.

    Mein rtf-File:

    Quellcode

    1. 1: Ein
    2. beliebiger Text
    3. aus der
    4. 1. RichTextBox //end
    5. 2: Ein beliebiger Text
    6. aus der 2. RichTextBox //end
    7. 3: Ein beliebiger Text aus
    8. der 3. RichTextBox //end


    Die einzelnen Boxen können verschieden formatiert sein. (Beispielsweise Fett, Kursiv, oder Unterstrichen)

    Ich möchte nun den Text, der zwischen ": " und " //end" steht auslesen, und diesen in die richtige RichTextBox (1/2/3) einordnen.
    Wie mache ich das, ohne die Formatierungen zu verlieren?

    Danke im vorraus!

    Serpifeu7 schrieb:

    ohne die Formatierungen zu verlieren
    Speichern und Laden geht so:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Me.RichTextBox1.SaveFile("c:\temp\test.rtf", RichTextBoxStreamType.RichText)
    3. End Sub
    4. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    5. Me.RichTextBox1.LoadFile("c:\temp\test.rtf", RichTextBoxStreamType.RichText)
    6. End Sub

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Serpifeu7 schrieb:

    einordne
    Hast Du eine wie-auch-immer zusammengeführte RTF-Datei
    oder hast Du eine Datei, die mehrere RTF-Texte beinhaltet?
    Probier mal

    VB.NET-Quellcode

    1. RichTextBox2.Rtf = RichTextBox1.SelectedRtf
    , nachdem Du in RichTextBox1 den korrekten Text markiert hast.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich glaube wir missverstehen uns gerade,

    ich möchte Daten die in einer RTF-Datei sind auslesen und dann in RichTextBoxen schreiben.

    Die entsprechende Datei siehst du oben:

    Serpifeu7 schrieb:


    Mein rtf-File:

    Quellcode

    1. 1: Ein
    2. beliebiger Text
    3. aus der
    4. 1. RichTextBox //end
    5. 2: Ein beliebiger Text
    6. aus der 2. RichTextBox //end
    7. 3: Ein beliebiger Text aus
    8. der 3. RichTextBox //end



    Ich möchte nun, dass das Programm den formatierten Text zwischen "1: " und " //end" in die RichTextBox1, sowie
    den Text zwischen "2: " und " //end" in die RichTextBox2 (usw.) schreibt.

    Ich hoffe das ist etwas verständlicher!?
    Du könntest nach "//end" splitten, und davon die ersten zwei Zeichen lesen, dort würdest du dann "x:" raus bekommen. Das erste Zeichen sagt dir ja welche Richtextbox du befüllen musst.

    String.Split und String.SubString sollte dir helfen.

    Serpifeu7 schrieb:

    missverstehen
    denke ich nicht.
    Wie entsteht Deine RTF-Datei?

    ThuCommix schrieb:

    nach "//end" splitten
    funktioniert nicht bei RTF.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Using output As New System.IO.StreamWriter("H:\Eigene Dateien\_Berichtsheftverwaltung\" + myname + ".rtf")
    2. output.Write("BT: " + rtb_Betriebl_Taetigkeit.Text + "//end" + Environment.NewLine + "SL: " + rtb_Schulungen.Text + "//end" + Environment.NewLine + "BS: " + rtb_Berufsschule.Text + "//end")
    3. End Using

    @Serpifeu7
    Dies ist keine RTF-Datei, da sie keinerlei Formatierung enthält.
    Benenne sie um in *.txt und behandle sie als Textdatei, den Text kannst Du dann splitten, wie es @ThuCommix vorgeschlagen hat.
    Wenn Du RichTexte zusammenführen willst, gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Aber bei *.txt werden doch Formatierungen wie Fett, Kursiv oder Unterstrichen nicht übernommen, oder liege ich da falsch?

    Das Problem ist nämlich, dass die späteren Nutzer ihre Berichte in diese Felder schreiben. Problem: Die Nutzer benötigen dazu Formatierungen!
    Danke für den Hinweis! Werde den Code ein bisschen abändern sodass dass dann möglich ist!
    EDIT: Code geändert:

    VB.NET-Quellcode

    1. rtb_Export.Clear()
    2. rtb_Export.SelectionStart = rtb_Export.TextLength
    3. rtb_Export.SelectedText = "BT:"
    4. rtb_Export.SelectionStart = rtb_Export.TextLength
    5. rtb_Export.SelectedRtf = rtb_Betriebl_Taetigkeit.Rtf
    6. rtb_Export.SelectionStart = rtb_Export.TextLength
    7. rtb_Export.SelectedText = "//end" + Environment.NewLine + "SL:"
    8. rtb_Export.SelectionStart = rtb_Export.TextLength
    9. rtb_Export.SelectedRtf = rtb_Schulungen.Rtf
    10. rtb_Export.SelectionStart = rtb_Export.TextLength
    11. rtb_Export.SelectedText = "//end" + Environment.NewLine + "BS:"
    12. rtb_Export.SelectionStart = rtb_Export.TextLength
    13. rtb_Export.SelectedRtf = rtb_Berufsschule.Rtf
    14. rtb_Export.SelectionStart = rtb_Export.TextLength
    15. rtb_Export.SelectedText = "//end"
    16. Using output As New System.IO.StreamWriter("H:\Eigene Dateien\_Berichtsheftverwaltung\" + myname + ".rtf")
    17. output.Write(rtb_Export.Rtf)
    18. End Using


    Mein Problem ist damit leider immernoch nicht wirklich gelöst, auch wenn ich ein Stückchen weiter bin!

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Serpifeu7“ ()

    Serpifeu7 schrieb:

    ein bisschen abändern
    Das hatten wir bereits in Post #2. 8o

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Me.RichTextBox1.SaveFile("c:\temp\test.rtf", RichTextBoxStreamType.RichText)
    3. End Sub
    4. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    5. Me.RichTextBox1.LoadFile("c:\temp\test.rtf", RichTextBoxStreamType.RichText)
    6. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Serpifeu7 schrieb:

    Suchen
    So was:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. RichTextBox1.Text = "123456789"
    3. End Sub
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. RichTextBox1.SelectionStart = 3
    6. RichTextBox1.SelectionLength = 4
    7. RichTextBox1.SelectionColor = Color.Red
    8. MessageBox.Show(RichTextBox1.SelectedRtf)
    9. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Serpifeu7 schrieb:

    geht nicht
    gibt's nicht.
    Dann musst Du Dir die Position und die Länge über String-Such-Methoden ermitteln: .IndexOf(...), da gibt es mehrere Überladungen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Manawyrm schrieb:

    serialisieren
    Jou.
    Eine DataTable mit Strings ginge ganz easy.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Manawyrm

    Manawyrm schrieb:

    Und ich weiß ja nicht, ob //end so eine tolle Idee ist. Was passiert, wenn ein Nutzer diesen Text in die Textbox eingibt?
    Wie wahrscheinlich ist es das jemand "//end" in einen Bericht eintipp?


    @Alle
    Habe selbst ein bisschen Code erarbeitet. Leider bekomme ich daraus noch keine Formatierungen! Hat jemand eine Idee wie sich soetwas umsetzten ließe?

    Mein erarbeiteter Code:

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. If My.Computer.FileSystem.FileExists("Hier Pfad einfügen") = True Then
    3. RichTextBox3.LoadFile("Hier Pfad einfügen", RichTextBoxStreamType.RichText)
    4. RichTextBox1.Clear()
    5. RichTextBox1.Text = between(RichTextBox3.Text, "//S1//", "//E1//")
    6. RichTextBox2.Clear()
    7. RichTextBox2.Text = between(RichTextBox3.Text, "//S2//", "//E2//")
    8. Else
    9. MessageBox.Show("Datei nicht gefunden!", "Fehler!")
    10. End If
    11. End Sub
    12. Private Function between(value As String, start As String, ende As String)
    13. Dim startwith As Integer = value.IndexOf(start)
    14. Dim endwith As Integer = value.LastIndexOf(ende)
    15. If startwith = -1 Or endwith = -1 Then
    16. Return ""
    17. End If
    18. Dim adjustedstart As Integer = startwith + start.Length
    19. If adjustedstart >= endwith Then
    20. Return ""
    21. End If
    22. 'substring zwischen den markierungen:
    23. Return value.Substring(adjustedstart, endwith - adjustedstart)
    24. End Function


    Hinweis:
    Ich habe die Namen verallgemeinert, damit jeder der den Code braucht in nur noch anpassen muss.
    Außerdem habe ich die Markierungen ein bisschen verändert, dass die wahrscheinlichkeit, dass ein Nutzer eine Markierung setzt noch unwahrscheinlicher wird.