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 😉
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:
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 |
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)
Ich würde das anders angehen.
- Du löschst Zeile 0
- Du zählst hoch auf 1
- => 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 😉
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.