Laden...

Datei Zweilenweise auslesen und dann Zeilen die mit "//" beginnen entfernen

Erstellt von DaNeubi vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.088 Views
DaNeubi Themenstarter:in
8 Beiträge seit 2016
vor 7 Jahren
Datei Zweilenweise auslesen und dann Zeilen die mit "//" beginnen entfernen

Hey Leute,

folgendes Problem

Ich lasse eine .lang Datei einlesen und möchte die Kommentare Entfernen lassen, Kommentare starten mit "//"


        private void ReadFromLangFile(string language)
        {

            short linefromfile = 0;
            string[] textfromfile = File.ReadAllLines(language);

            while (linefromfile <= textfromfile.Length)
            {
                if (textfromfile[linefromfile].StartsWith("/" + "/"))
                {
                    var list = new List<string>(textfromfile);
                    list.Remove(textfromfile[linefromfile]);
                    textfromfile = list.ToArray();
                }


                linefromfile++;
            }

            foreach (string eachline in textfromfile)
            {
                richTextBox1.AppendText(eachline + "\n");
            }

Nur steht aber leider folgendes in der Ausgabe

//

%1%Hallo Welt

%2%Test1

Und So sieht meine Datei aus

//German Language File
//

//Labels
%1%Hallo Welt

//MenuItems

//Buttons
%2%Test1

//Forms

Irgendjemand ne Idee, warum er mir nicht alle "//" entfernt?

Danke im Vorraus
DaNeubi

Wenn du Rechtschreibfehler findest, darfst du die gerne behalten 😉

2.298 Beiträge seit 2010
vor 7 Jahren

Ich würde das anders angehen.


string[] textfromfile = File.ReadAllLines(language);
List<string> result = new List<string>();

foreach(string line in textfromfile)
{
     if(!line.Trim().StartsWith(@"//"))
         result.Add(line);
}

Und zum Grund warum bei dir nicht alle entfernt werden: Du zählst in jedem Schleifendurchlauf den Zähler hoch. - Das dürftest du wenn du einen Eintrag entfernt hast nicht machen. Denn sonst passiert folgendes:

  1. Du löschst Zeile 0
  2. Du zählst hoch auf 1
  3. => An Pos 0 könnte sich jetzt ein "//" befinden. Das merkst du aber nicht mehr.

Dennoch empfehle ich dir meine Variante statts dem ständigen generieren von Listen.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

3.003 Beiträge seit 2006
vor 7 Jahren

Irgendjemand ne Idee, warum er mir nicht alle "//" entfernt?

Ja, weil du gleichzeitig eine Liste enumerierst UND Elemente aus ihr entfernst. Sowas geht nie gut.

inflames2ks Ansatz ist da doch ein Stückchen eleganter. Man muss auch nicht die ganze Datei im Speicher halten, sondern kann sie gleich zeilenweise lesen:


private IEnumerable<string> GetNonCommentLines(string filePath)
{
    using (var reader = new StreamReader(filePath))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
            if (!line.Trim().StartsWith("//")) 
                yield return line;
    }
}

var result = GetNonCommentLines(language).ToArray();

LaTino

EDIT: Überschneidung mit inflames edit. Egal, ich lass es mal stehen 😉

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

DaNeubi Themenstarter:in
8 Beiträge seit 2016
vor 7 Jahren

Ich würde das anders angehen.

  1. Du löschst Zeile 0
  2. Du zählst hoch auf 1
  3. => An Pos 0 könnte sich jetzt ein "//" befinden. Das merkst du aber nicht mehr.

Oh man, danke das hab ich ja voll Übersehen.

Wenn du Rechtschreibfehler findest, darfst du die gerne behalten 😉

T
2.224 Beiträge seit 2008
vor 7 Jahren

Ohne den context zu kennen, stelle ich mir die Frage was du mit der lang datei machst.
Verwendest du diese als Überssetzungsdatei?
Dafür hat .Net eigentlich die resx Dateien.
Oder ist dein Code nur zum aufräumen der Dateien für andere Anwendungen gedacht?

Wenn du deine Übersetzungen z.B. in Winforms verwendest, dann nimm resx.
Das kann dann deine Übersetzungen enthalten und für die jeweilige Sprache die passenden Daten liefern.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.