Auslesen & Abkürzen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Giftzwockel.

    Auslesen & Abkürzen

    Hey, Hey

    Habe 2 Fragen.

    1. Frage :

    Kann man irgentwie die ganzen Eingaben in einer Richtextbox einlesen schon beim
    eintippen und die dan Auswerten?

    2. Frage :

    Wen ich z.B. in einer Textbox "Hallo du da" stehen habe soll der nur 7 Zeichen auslesen oder nur das 2 Wort?
    Also entweder nur das 7 zeichen "d" oder das 2 wort "du" ? geht soetwas?

    LG Keybladmaster
    Zu 1.)
    Schau dir mal das Event "TextChanged" der RichTextBox an.

    Zu 2.)
    Suche mal nach "Split". Splitte an einem Leerzeichen, und du bekommst ein Array aller Wörter zurück, mithilfe dessen nullbasiertem Index du dann auf ein bestimmtes Wort zugreifen kannst.
    Hey,

    Du kannst alles im TextChanged Event abhandeln.

    Überprüfe dort, ob der Text, der in der RTB steht, länger oder gleich 7 ist, wenn ja, dann schnapp Dir das 7. Zeichen mit SubString.

    Weiterhin überprüfe mit Hilfe von Split, ob es mehr oder gleich 2 Wörter sind, wenn ja, dann schnapp Dir das 2. Wort.

    Ich gehe mal davon aus, dass Dir diese Begriffe bekannt sind...?
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    Keybladmaster schrieb:

    Danke für die 1 Antwort.
    Aber die 2 verstehet ich nicht ganz.

    LG Keybladmaster

    Zur Veranschaulichung hier mal ein Projectcode.

    VB.NET-Quellcode

    1. Option Explicit On
    2. Imports System.IO
    3. Imports Microsoft
    4. Imports System.Runtime.InteropServices
    5. Imports System.Text.RegularExpressions 'Grundlage um Text auf Wörter, Sätze etc. zu analysieren
    6. Imports System.Text
    7. Public Class Form1
    8. Function CountWords(ByVal s As String) As Integer
    9. Dim myRegex As Regex = New Regex("[\w]+")
    10. Return myRegex.Matches(s).Count
    11. End Function
    12. Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
    13. 'Sätze zählen
    14. Function CountSentences(ByVal s As String) As Integer
    15. Dim mySentences As Regex = New Regex("[\b[.!?;]\B")
    16. Return mySentences.Matches(s).Count
    17. End Function
    18. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    19. Me.lbl_Sentences.Text = Nothing 'Anzeige wieviel Sätze das Dokument enthält wird geleert
    20. Me.lbl_words.Text = Nothing 'Anzeige wieviel Wörter das Dokument enthält wird geleert
    21. Me.lbl_Characters.Text = Nothing 'Anzeige wieviel Zeichen das Dokument enthält wird geleert
    22. End Sub
    23. Private Sub rtf_speek_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rtf_speek.TextChanged
    24. 'Textanalyse Zählen von Zeichen, Wörtern und Sätzen
    25. 'später zerpfücken in div. Listboxes
    26. Try
    27. Dim TotalLengthVorlage As Long = rtf_speek.Text.Length
    28. Dim WordCountVorlage As Long = CountWords(rtf_speek.Text).ToString()
    29. Dim SentencesVorlage As Long = CountSentences(rtf_speek.Text).ToString()
    30. 'sgBox("Das Original hat : " & vbCrLf & TotalLengthVorlage & " Buchstaben, " & vbCrLf & WordCountVorlage & " Wörter und " & vbCrLf & SentencesVorlage & " Sätze.")
    31. Me.lbl_Sentences.Text = SentencesVorlage & " Sätze"
    32. Me.lbl_words.Text = WordCountVorlage & " Wörter"
    33. Me.lbl_Characters.Text = TotalLengthVorlage & " Zeichen"
    34. Catch ex As Exception
    35. End Try
    36. End Sub
    37. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    38. Dim ofd As New OpenFileDialog
    39. If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
    40. Dim Endung As String = (Path.GetExtension(ofd.FileName)) 'ohne Pfad
    41. If Endung = ".rtf" Then
    42. rtf_speek.LoadFile(ofd.FileName)
    43. 'Zerlegt Text in Einzelne Zeilen
    44. For Each Line In rtf_speek.Text.Split(".!?;")
    45. Me.Sätze.Items.Add(Line)
    46. Next
    47. 'Zerlegt Text in Einzelne Wörter
    48. For Each Line In rtf_speek.Text.Split()
    49. Me.Wörter.Items.Add(Line)
    50. Next
    51. Else
    52. MsgBox("andere Endung als rtf")
    53. End If
    54. End If
    55. End Sub
    56. Private Sub Wörter_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Wörter.SelectedIndexChanged
    57. lbl_Lesen.Text = Wörter.SelectedItem.ToString()
    58. 'Wörter.SelectedItem.ToString().Split()
    59. Buchstaben.Items.Clear()
    60. For Each Line In Wörter.Text
    61. Me.Buchstaben.Items.Add(Line)
    62. lbl_AktWort.Text = "akt. Wort: " & Wörter.SelectedIndex.ToString + 1
    63. Next
    64. End Sub
    65. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    66. 'Ermittelt die ersten beiden Sätze der Vorlage
    67. 'Wird später benötigt, um der gescannten Datei automatisch einen Namen zu geben.
    68. Label1.Text = (rtf_speek.Lines(0) & rtf_speek.Lines(1))
    69. End Sub
    70. Private Sub Sätze_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Sätze.SelectedIndexChanged
    71. 'Zerlegt den aktuellen Satz in einzelne Wörter.
    72. Wörter.Items.Clear()
    73. For Each Line In Sätze.Text.Split()
    74. Me.Wörter.Items.Add(Line)
    75. lbl_AktSatz.Text = "akt. Satz: " & Sätze.SelectedIndex.ToString + 1
    76. Next
    77. End Sub
    78. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    79. Try
    80. Timer1.Interval = 4000
    81. Dim W As Integer
    82. For W = 0 To Wörter.Items.Count
    83. lbl_Lesen.Text = Nothing
    84. Wörter.SelectedIndex = W
    85. lbl_Lesen.Text = Wörter.SelectedItem.ToString()
    86. lbl_Lesen.Text = Nothing
    87. Next
    88. Catch ex As Exception
    89. End Try
    90. End Sub
    91. Private Sub btn_lesen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_lesen.Click
    92. Timer1.Start()
    93. End Sub
    94. End Class


    In ein RTF-Box wird ein beliebige RTF-Datei geladen.
    Dieser Text wird dann gesplittet.
    In einer zweiten Box wird vom Originaltext für jeden Satz eine neue Zeile begonnen.
    Mit einem Button kannst du den ersten Satz (oder je nach Code jeden anderen Satz/wort etc. separieren) und wie hier in einem Label darstellen.
    Der Text dieser zweiten Box wird aufgedröselt in einer dritten Box dargestellt wobei jedes Wort in einer neuen Zeile beginnt.
    Wählst du in dieser Box ein Wort aus (Mausclick) wird dieses wieder gesplittet un in einer vierten Textbox dargestellt, wobei jeder Buchstabe in einer neuen Zeile beginnt.

    Wozu man das braucht? Keine Ahnung. Ich wollte die Funktion verstehen lernen.
    Ach ja, bei dieser Gelegenheit bekommst du im Code auch eine Info aus wievielen Sätzen, Worten und Zeichen dein geladener Text besteht.
    Bei der Auswahl eines Satzes in RTF-Box 2 und eines Wortes in RTF-Box 3 bekommst du auch angezeigt, der wievielte Satz das in Text ist und das wievielte Wort im Satz.
    Das kann wichtig sein, wenn du mit dem Satz oder dem Wort was anstellen möchtest.
    Viele Grüße
    Stefan

    sailor4rent.de

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Giftzwockel“ ()

    @Giftzwockel

    Bei allem Respekt. Diese Code sollte in dieser Form nicht in irgendwelchen Projekten verwendet werden.

    1. OPTION STRICT ON fehlt.
    2. Sinnlose Try-Catch-Blöcke.
    3. Was soll dieser Timer?
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    SpaceyX schrieb:

    @Giftzwockel

    Bei allem Respekt. Diese Code sollte in dieser Form nicht in irgendwelchen Projekten verwendet werden.

    1. OPTION STRICT ON fehlt.
    2. Sinnlose Try-Catch-Blöcke.
    3. Was soll dieser Timer?
    Müssen solche Kommentare sein?
    Je nach "Schaffensperiode" fällt ein Code bei jedem mehr oder weniger professionell aus.
    Heute würde ich den Code auch anders schreiben.
    Es ging hier um die Split-Funktion.

    Was der Timer soll?
    Um deine Floskel zu verwendenm bei allem Respekt, bevor man einen Code kommentiert oder "zerpflückt" sollte man ihn erst mal verstehen.





    SpaceyX schrieb:

    @Giftzwockel

    Bei allem Respekt. Diese Code sollte in dieser Form nicht in irgendwelchen Projekten verwendet werden.

    1. OPTION STRICT ON fehlt.
    2. Sinnlose Try-Catch-Blöcke.
    3. Was soll dieser Timer?
    Viele Grüße
    Stefan

    sailor4rent.de
    Oh, ich verstehe Deinen Code, keine Sorge. Und dieser Timer ist nicht notwendig.

    Ich hab mich hier bewusst etwas zurückhaltender ausgedrückt, da ich Repsekt vor älteren Personen habe. Anscheinend siehst Du das nicht so.

    Ja, solche Kommentare müssen sein, weil es dem TE in keinster Weise hilft, wenn ihm hier Code wie dieser vorgesetzt wird. Wenn Du heute schon vieles anders machen würdest, dann wäre es vielleicht angebracht gewesen, ein neues kurzes und knappes Beispiel zu erstellen. Das ist meine Meinung. Wenn Du mit dieser Kritik nicht umgehen kannst, ist es nicht meine Schuld.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Also habe das ganze mal so angegangen aber
    der split funktioniert nicht ganz wen ich ihn ausgeben möchte...

    VB.NET-Quellcode

    1. Dim saveText As String
    2. Dim savetextSplit As String
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. Timer1.Start()
    5. Label1.Text = saveText
    6. End Sub
    7. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    8. saveText = RichTextBox1.Text
    9. savetextSplit = RichTextBox1.Text
    10. Timer1.Stop()
    11. End Sub
    12. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    13. Dim TestArray() As String = Split(savetextSplit)
    14. End Sub


    BTW :

    Habe es nun etwa so Gelöst!
    Ist das so in der Art Korrekt?

    VB.NET-Quellcode

    1. Dim Split() = RichTextBox1.Text.Split(CChar(", "))
    2. MsgBox(Split(1))

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Keybladmaster“ ()

    SpaceyX schrieb:

    Oh, ich verstehe Deinen Code, keine Sorge. Und dieser Timer ist nicht notwendig.

    Ich hab mich hier bewusst etwas zurückhaltender ausgedrückt, da ich Repsekt vor älteren Personen habe. Anscheinend siehst Du das nicht so.

    Ja, solche Kommentare müssen sein, weil es dem TE in keinster Weise hilft, wenn ihm hier Code wie dieser vorgesetzt wird. Wenn Du heute schon vieles anders machen würdest, dann wäre es vielleicht angebracht gewesen, ein neues kurzes und knappes Beispiel zu erstellen. Das ist meine Meinung. Wenn Du mit dieser Kritik nicht umgehen kannst, ist es nicht meine Schuld.
    Den Timner hast du nicht verstanden!
    Zum Rest äußere ich mich nicht weiter. Das gehört nämlich nicht hierher.
    Viele Grüße
    Stefan

    sailor4rent.de