Textdatei aufteilen, alle 200 Wörter.

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von picoflop.

    Textdatei aufteilen, alle 200 Wörter.

    Also ich muss eine Textdatei einlesen, und dann soll alle 200 Wörter eine neue Textdatei erstellt werden mit den letzten 200 Wörtern.

    Einlesen und die Wörter zählen tue ich so

    VB.NET-Quellcode

    1. ' Dokument
    2. Dim objReader As New StreamReader(txtDoc.Text, System.Text.Encoding.Default)
    3. Dim strSource As String = objReader.ReadToEnd()
    4. ' Wörter (Anzahl)
    5. Dim WordCount As Long = strSource.Split(" ").Length
    6. ' Wörter
    7. Dim arrWords As String() = strSource.Split(" ")

    Aber soll ich es machen das er alle 200 Wörter die letzten 200 Wörter in eine neue Textdatei schreibt?

    Vielen Dank im Voraus
    Die Wörter sind ja bereits in einem Array

    VB.NET-Quellcode

    1. Dim arrWords As String() = strSource.Split(" ")

    Aber ich habe keine Idee wie ich das mit dem Zählen machen soll, das er alle 200 Wörter in eine neue Datei schreibt.

    Wäre nett wenn du ein Beispiel hast.
    Na mit ner Schleife von Arraylänge - 200 bis zum Arrayende (vorher prüfen, ob das Array >= 200 Einträge hat) und in der Schleife die Einträge in einen String schreiben. Und denne mit File.WriteAllText in deine Textdatei schreibsen.
    :P
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    ich würd irgendwie so machen (ausm kopf)

    VB.NET-Quellcode

    1. dim txt as string = ...readalltext(txt_datei)
    2. dim arr as string() = split(txt," ")
    3. dim datei as string = "C:\abc"
    4. for i as integer = 0 to ubound(arr)
    5. if (i+1) / 200 = geradeZahl then datei = datei & "x"
    6. writetext(arr(i) & " ", datei & ".txt"
    7. next i
    Für ein Mindestmaß an Rechtschreibung, Interpunktion und Majuskeln!

    bla schrieb:

    ich würd irgendwie so machen (ausm kopf)

    VB.NET-Quellcode

    1. dim txt as string = ...readalltext(txt_datei)
    2. dim arr as string() = split(txt," ")
    3. dim datei as string = "C:\abc"
    4. for i as integer = 0 to ubound(arr)
    5. if (i+1) / 200 = geradeZahl then datei = datei & "x"
    6. writetext(arr(i) & " ", datei & ".txt"
    7. next i
    Für was steht geradeZahl in diesem Code?
    Hallo,
    kann ja sein, dass ich mich irre. Aber diese gerade Zahl halte ich für Unsinn. (z.B bei i=201 müßte die nächste Datei anfangen, 201/200=1,005, is keine gerade Zahl).
    Ich hätte es so gelöst:

    VB.NET-Quellcode

    1. Private Sub schleife()
    2. Dim Quellpfad As String = "C:\xyz"
    3. Dim Zielpfad As String = "C:\abc"
    4. Dim txt As String = IO.File.ReadAllText(Quellpfad)
    5. Dim arr As String() = Split(txt, " ")
    6. Dim Ende As Integer = 200
    7. Dim Dateizähler As Integer = 1
    8. Dim Text As String = ""
    9. For i As Integer = 0 To UBound(arr)
    10. If i + 1 <= Ende Then
    11. 'Text zusammenstellen
    12. Text &= arr(i) & " "
    13. Else
    14. 'Datei speichern
    15. IO.File.WriteAllText(Text, Zielpfad & Dateizähler & ".txt")
    16. 'Zähler neu setzen
    17. Ende += 200
    18. Dateizähler += 1
    19. End If
    20. Next
    21. End Sub
    Da wird der Text erstma in einen String geschrieben und anschließend in die Ziel-Datei. Außerdem gibt es einen Zähler für die Dateinamen. 8-)
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    LINQ:

    VB.NET-Quellcode

    1. Dim s As String = "Hallo du großer Hund"
    2. Dim worte() As String = Split(s, " ")
    3. Dim result() As String = (From wort As String In worte Skip Math.Max(0, worte.Count - 200) Select wort Take 200).ToArray


    Kann man natürlich problemlos so erweitern, dass er das ganze in einer Schleife in Blöcke von je 200 worten zerlegt. Die Schleife macht man dann im Zweifel so lange bis result.count kleiner als die gewünschte wortzahl ist.

    EDIT: zb:

    VB.NET-Quellcode

    1. Dim s As String = "Hallo du großer Hund"
    2. Dim worte() As String = Split(s, " ")
    3. Dim i As Integer = 0
    4. Dim takewords As Integer = 2
    5. Dim result() As String
    6. Do
    7. result = (From wort As String In worte Skip Math.Max(0, takewords * i) Select wort Take takewords).ToArray
    8. i += 1
    9. Loop Until result.Count < takewords

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