Ungooglebares Problem beim Textauslesen

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.

    Ungooglebares Problem beim Textauslesen

    Hallo Forum,
    ich habe folgendes geschrieben, um in unserem Computerspiel eine Anpassung an die Sprache des Spielers zu ermöglichen:

    VB.NET-Quellcode

    1. Public Function ReadLine(ByVal filename As String, ByVal line As Integer) As String
    2. Try
    3. Dim lines As String() = My.Computer.FileSystem.ReadAllText( _
    4. filename, System.Text.Encoding.Default).Split(vbCrLf)
    5. If line > 0 Then
    6. ' n-te Zeile vom Anfang der Textdatei
    7. Return lines(line - 1)
    8. ElseIf line < 0 Then
    9. ' n-te Zeile beginnend am Ende der Textdatei
    10. Return lines(lines.Length + line - 1)
    11. Else
    12. ' ungültige Zeilennummer
    13. Return ""
    14. End If
    15. Catch ex As Exception
    16. Return ""
    17. End Try


    Abgerufen wird die Funktion beispielsweise so:

    VB.NET-Quellcode

    1. lblTalking.Text = ReadLine("languages\" & language & ".txt", 16) & ClickerMasterName & ReadLine("languages\" & language & ".txt", 17)


    Mein Problem ist nun das folgende. Irgendwie liest das Programm nun aus den Zeilen irgendwelche Absätze mit raus. Also vor jedem abgerufenem Textschnipsel fügt das Programm einen Absatz ein, was bei zusammengesetzten Texten wie im Beispiel echt hässlich aussieht. Etwa so

    Hallo
    Steven,
    schön, dass du heute, am 26.08
    hier im Forum bist.

    Wenn ich es aus Hallo & Name & schön, dass [...] & Datum & hier[...] zusammensetze

    Hat jemand eine Idee, wie man die Absätze da rausbekommt?
    Unser erstes Computerspiel. Jetzt mit eigenem Steam-Community-Hub:

    steamcommunity.com/app/924890

    Neue Seite, gewohnt schlechtes Englisch! Schaut vorbei

    Steven2m schrieb:

    Hat jemand eine Idee, wie man die Absätze da rausbekommt?


    Zeig uns mal die Textdatei.(Anhängen)

    Aber warum liest du den Text als ganzes aus um in dann bei vbCrLf's zu splitten? Lass auch diesem My.Computer-Mist weg. Hier System.IO nutzen! Was sogar schneller zu schreiben ist.

    VB.NET-Quellcode

    1. Dim lines() As String = IO.File.ReadAllLines("")

    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

    Steven2m schrieb:

    Wie kann ich eine Datei anfügen?


    Beim verfassen eines Posts auf erweiterte Antwort klicksen. Aber ist ja nun schon gelöst.

    Wegen des My-Namespace Mist, schau auch mal hier:
    Visual Studio - Empfohlene Einstellungen

    Der Grund, warum das beim splitten mit vbCrLf nicht klappte kann sein, das nicht jeder Zeilenumbruch zwingend ein vbCrLf sein muss.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

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

    Oh nein, dafür werden jetzt Sonderzeichen wie ä,ü, à und so weiter nicht mehr angezeigt.

    Ah, das kann man googlen:

    Dim lines() As String = IO.File.ReadAllLines(filename, System.Text.Encoding.Default)

    So geht das: Einfach "System.Text.Encoding.Default" als zweiten Parameter einsetzen von ReadAllLines setzen!
    Unser erstes Computerspiel. Jetzt mit eigenem Steam-Community-Hub:

    steamcommunity.com/app/924890

    Neue Seite, gewohnt schlechtes Englisch! Schaut vorbei

    Steven2m schrieb:

    Anpassung an die Sprache des Spielers
    gugst Du hier:
    Programme mehrsprachig erstellen
    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!
    Das ursprüngliche Problem ergibt sich durch Option Strict Off. Option Strict auf On stellen, dann sieht man sofort, was das Problem ist.
    Visual Studio - Empfohlene Einstellungen
    vbCrLf ist ein String, der aus zwei Zeichen besteht. String.Split(Char) erwartet ein einziges Char. Option Strict Off nimmt einfach das erste Zeichen von vbCrLf (also Cr) und daran wird dann gesplittet. Dann bleiben die Lf-Zeichen natürlich in den Teilen enthalten.
    Option Strict On!
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils