viele wörter in text datei erstetzen

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Rolle85.

    viele wörter in text datei erstetzen

    hallo
    ich habe eine textdatei in der ich ca. 50 verschiedene wörter durch ein anderes ersetzen möchte.
    das wort das ich ersetzt ist immer das gleiche.

    ich habe mir die 50 wörter schon aus der textdatei kopiert.
    die wörter möchte ich alle mit ein und den selben wort ersetzen.

    jetzt wäre is ja zu aufwendig immer mit .replace zu arbeiten.

    könnte man nich einfach die textdatei in einer list laden.

    und dann da ersetzen?
    weiß noch nicht so recht wie ich da ran gehen soll.

    Tommi8821 schrieb:

    das wort das ich ersetzt ist immer das gleiche.

    Das heißt, in einem Text, in dem möchtest du gleiche Wörter durch viele Unterschiedliche ersetzen ? Nach welcher Regel denn ?
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    C#-Quellcode

    1. const string lNeuesWort = "Ersetzt";
    2. string lText = System.IO.File.ReadAllText("Pfad");
    3. string[] lZuErsetzendeWoerter = System.IO.File.ReadAllLines("Pfad");
    4. foreach (var item in lZuErsetzendeWoerter)
    5. {
    6. lText = lText.Replace(item, lNeuesWort);
    7. }


    Kannst es ja so machen.
    Musst dann die 50 zu ersetzenden Wörter in eine textdatei packen (ein wort pro zeile)

    Tommi8821 schrieb:

    unterschiedliche wörter durch eins ersetzen.
    So was:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. 'Dim txt = IO.File.ReadAllText("c:\Temp\Test.txt")
    3. Dim txt = "Ich bin. Du bist. Er ist, Sie isst, Es war einmal"
    4. Dim worte() = {"ich", "du", "er", "sie", "es"}
    5. txt = txt.ToLower
    6. For Each wort In worte
    7. txt = txt.Replace(wort, "wir")
    8. Next
    9. MessageBox.Show(txt)
    10. End Sub
    Bilder
    • Replace.jpg

      34,34 kB, 647×277, 101 mal angesehen
    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!
    so das klappt alles schon ziemlich gut.

    jetzt möchte ich aber noch einen schritt weiter gehen.
    und zwar.

    Ich habe meine wörter die zu ersetzen sind in einen string Array:
    worte
    diese worte möchte ich ja in der textdatei ersetzen.
    jetzt möchte ich das die worte durch eine zufällig generierte Zeichenkette ersetzt wird.
    dafür habe ich schon eine funktion die mir einen string ausgibt
    key.generate

    wenn ich jetzt aber in der for each
    einfach die worte mit key.generate ersetzen will,
    erstellt er mich auch eine Zeichenkette und alle worte werden ersetzt.
    Aber es wird jedes wort mit der selben Zeichenkette ersetzt.

    darum hab ich mir überlegt eine for schleife:

    Quellcode: vb.net

    1. for i = 0 to worte.lenght -1
    2. txt = txt.replace(worte(i), key.generate)


    müsste doch so klappen oder?
    kann es leider die tage nicht testen

    Quellcode: vb.net

    1. Option Strict On
    2. Imports System.Text
    3. ''' <date>27072005</date><time>070339</time>
    4. ''' <type>class</type>
    5. ''' <summary>
    6. ''' REQUIRES PROPERTIES: KeyLetters, KeyNumbers, MaxChars
    7. ''' </summary>
    8. Public Class RandomKeyGenerator
    9. Dim Key_Letters As String
    10. Dim Key_Numbers As String
    11. Dim Key_Chars As Integer
    12. Dim LettersArray As Char()
    13. Dim NumbersArray As Char()
    14. ''' <date>27072005</date><time>071924</time>
    15. ''' <type>property</type>
    16. ''' <summary>
    17. ''' WRITE ONLY PROPERTY. HAS TO BE SET BEFORE CALLING GENERATE()
    18. ''' </summary>
    19. Protected Friend WriteOnly Property KeyLetters() As String
    20. Set(ByVal Value As String)
    21. Key_Letters = Value
    22. End Set
    23. End Property
    24. ''' <date>27072005</date><time>071924</time>
    25. ''' <type>property</type>
    26. ''' <summary>
    27. ''' WRITE ONLY PROPERTY. HAS TO BE SET BEFORE CALLING GENERATE()
    28. ''' </summary>
    29. Protected Friend WriteOnly Property KeyNumbers() As String
    30. Set(ByVal Value As String)
    31. Key_Numbers = Value
    32. End Set
    33. End Property
    34. ''' <date>27072005</date><time>071924</time>
    35. ''' <type>property</type>
    36. ''' <summary>
    37. ''' WRITE ONLY PROPERTY. HAS TO BE SET BEFORE CALLING GENERATE()
    38. ''' </summary>
    39. Protected Friend WriteOnly Property KeyChars() As Integer
    40. Set(ByVal Value As Integer)
    41. Key_Chars = Value
    42. End Set
    43. End Property
    44. ''' <date>27072005</date><time>072344</time>
    45. ''' <type>function</type>
    46. ''' <summary>
    47. ''' GENERATES A RANDOM STRING OF LETTERS AND NUMBERS.
    48. ''' LETTERS CAN BE RANDOMLY CAPITAL OR SMALL.
    49. ''' </summary>
    50. ''' <returns type="String">RETURNS THE
    51. ''' RANDOMLY GENERATED KEY</returns>
    52. Function Generate() As String
    53. Dim i_key As Integer
    54. Dim Random1 As Single
    55. Dim arrIndex As Int16
    56. Dim sb As New StringBuilder
    57. Dim RandomLetter As String
    58. ''' CONVERT LettersArray & NumbersArray TO CHARACTR ARRAYS
    59. LettersArray = Key_Letters.ToCharArray
    60. NumbersArray = Key_Numbers.ToCharArray
    61. For i_key = 1 To Key_Chars
    62. ''' START THE CLOCK - LAITH - 27/07/2005 18:01:18 -
    63. Randomize()
    64. Random1 = Rnd()
    65. arrIndex = -1
    66. ''' IF THE VALUE IS AN EVEN NUMBER WE GENERATE A LETTER,
    67. ''' OTHERWISE WE GENERATE A NUMBER
    68. ''' - LAITH - 27/07/2005 18:02:55 -
    69. ''' THE NUMBER '111' WAS RANDOMLY CHOSEN. ANY NUMBER
    70. ''' WILL DO, WE JUST NEED TO BRING THE VALUE
    71. ''' ABOVE '0' - LAITH - 27/07/2005 18:40:48 -
    72. If (CType(Random1 * 111, Integer)) Mod 2 = 0 Then
    73. ''' GENERATE A RANDOM INDEX IN THE LETTERS
    74. ''' CHARACTER ARRAY - LAITH - 27/07/2005 18:47:44 -
    75. Do While arrIndex < 0
    76. arrIndex = _
    77. Convert.ToInt16(LettersArray.GetUpperBound(0) _
    78. * Random1)
    79. Loop
    80. RandomLetter = LettersArray(arrIndex)
    81. ''' CREATE ANOTHER RANDOM NUMBER. IF IT IS ODD,
    82. ''' WE CAPITALIZE THE LETTER
    83. ''' - LAITH - 27/07/2005 18:55:59 -
    84. If (CType(arrIndex * Random1 * 99, Integer)) Mod 2 <> 0 Then
    85. RandomLetter = LettersArray(arrIndex).ToString
    86. RandomLetter = RandomLetter.ToUpper
    87. End If
    88. sb.Append(RandomLetter)
    89. Else
    90. ''' GENERATE A RANDOM INDEX IN THE NUMBERS
    91. ''' CHARACTER ARRAY - LAITH - 27/07/2005 18:47:44 -
    92. Do While arrIndex < 0
    93. arrIndex = _
    94. Convert.ToInt16(NumbersArray.GetUpperBound(0) _
    95. * Random1)
    96. Loop
    97. sb.Append(NumbersArray(arrIndex))
    98. End If
    99. Next
    100. Return sb.ToString
    101. End Function
    102. End Class
    Probier das mal denn dein Code ist ziemlich unsauber:

    VB.NET-Quellcode

    1. Dim rand As Random = New Random()
    2. Public Function Generate() As String
    3. Dim charSet As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" 'Das hier ersetzen durch alle Buchstaben, Zahlen und Zeichen die in deinen String vorkommen können dürfen.
    4. Dim sb As New StringBuilder
    5. For i As Integer = 1 To 8 ' 8 mit Anzahl der Zeichen ersetzen
    6. Dim idx As Integer = rand.Next(0, charSet.Length - 1)
    7. sb.Append(charSet.Substring(idx, 1))
    8. Next
    9. Return sb.ToString()
    10. End Function

    KaskadekingDE on GitHub :)
    Bitte keine Fragen über Programmierung per PN! Dafür ist das Forum hier.

    Who cares? ¯\_(ツ)_/¯
    Form1

    C#-Quellcode

    1. string lText = "Ich bin ein albatroaz. Er ist ein albatroaz. Wir sind alle albatroaze";
    2. string[] lZuErsetzendeWoerter = {"bin","alle"};
    3. foreach (var item in lZuErsetzendeWoerter)
    4. {
    5. lText = lText.Replace(item, StringGenerator.Generate(1, 10));
    6. }
    7. MessageBox.Show(lText);


    StringGenerator

    C#-Quellcode

    1. public static class StringGenerator
    2. {
    3. static StringGenerator()
    4. {
    5. _rnd = new Random(DateTime.Now.Millisecond);
    6. }
    7. private static Random _rnd;
    8. private const string GEN_LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
    9. public static string Generate(int pMin, int pMax)
    10. {
    11. if (pMin > pMax)
    12. throw new ArgumentException("Untergrenze kann nicht größer Obergrenze sein");
    13. int lIterations = _rnd.Next(pMin, pMax + 1);
    14. string lResult = string.Empty;
    15. for (int i = 0;i < lIterations;i++)
    16. {
    17. lResult += GEN_LETTERS[_rnd.Next(0, GEN_LETTERS.Length)];
    18. }
    19. return lResult;
    20. }
    21. }

    Tommi8821 schrieb:

    jetzt möchte ich aber noch einen schritt weiter gehen. und zwar
    schreibe ich zunächst mal eine vollständige Aufgabenstellung / Problembeschreibung auf.
    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!
    @Tommi8821 : Mal nebenbei: Du schreibst über die Klasse in die Summary "Requires Properties ...", genau dazu sind Interfaces da.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Moin zusammen,

    Das was hier @ 'ThePlexian' geschrieben hat wäre etwas das ich in etwa gebrauchen könnte.

    ThePlexian schrieb:

    Das heißt, in einem Text, in dem möchtest du gleiche Wörter durch viele Unterschiedliche ersetzen ? Nach welcher Regel denn ?


    Mit regex wörter ersetzen klappt bei mir schonmal ganz gut.
    Jetzt bräuchte ich hilfe dabei, wie ich ein immer wieder vorkommendes Wort/Zeichenfolge durch eine fortlaufende ID ergänzen kann bis dieses vorkommen aufhört.
    Bei bis zu 1500 vorkommen wäre das händisch einfach zu aufwändig.

    VB.NET-Quellcode

    1. If CBRLO.Checked = True Then
    2. Dim RLO = File.ReadAllText(TBDateipfad.Text)
    3. RLO = Regex.Replace(RLO, "txt=""RLO"" type=""RLO", "txt=""RLO_1001"" type=""RLO")
    4. RLO = Regex.Replace(RLO, "txt=""RLO"" type=""RLO", "txt=""RLO_1002"" type=""RLO")
    5. RLO = Regex.Replace(RLO, "txt=""RLO"" type=""RLO", "txt=""RLO_1003"" type=""RLO")
    6. File.WriteAllText(TBDateipfad.Text, RLO)
    7. End If


    Weiss einer ob es dazu einen passenden Thread gibt? Finde nicht die passenden Schlagworte

    Vielen Dank im Vorraus ^^