Autor Beitrag
Ogrus
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 30.03.11 16:47 
hallo zusammen,
ich hab ein problem und hoffe ihr könnt mir dabei helfen:
und zwar hab ich eine .txt-Datei bei der in jeder Zeile nach ein paar Wörtern ein ";" kommt.

Jetzt meine Frage: Wie bekomme ich es hin, die Textzeile nur bis zum z.B. dritten ";" zu lesen, und diesen Teil bis zum Semikolon, in eine neue Datei zu schreiben ?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 30.03.11 18:27 
Du kannst mit File.ReadAllLines alle Zeilen einlesen, dann alle durchgehen und den gesuchten Teilstring aus der Zeile holen.
Ogrus Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 30.03.11 18:36 
und wie bekomm ich den Teilstring, wenn das jedes mal ein anderer ist ?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 30.03.11 19:34 
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Mi 30.03.11 19:34 
Hallo,
also Du könntest das mit einem regulären Audruck lösen.
Du liest einfach Zeile für Zeile ein, wendest den regürären Ausdruck an und schreibst den Wert aus der Group wieder in die neue Datei.
Die regulären Ausdrücke nach Deinem Beispiel könnten z.B. so aussehen:
ausblenden C#-Quelltext
1:
2:
var regex = new Regex("(?<match>(.*?;){3})");       //Wert der Gruppe inklusive des letzten ";"-Zeichens
var regex = new Regex("(?<match>(.*?;){2}[^;]*)?"); //Wert der Gruppe exklusive des letzten ";"-Zeichens
Anwendung dann wie folgt:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
var match = regex.Match(line);
if (match.Success)
{
  string newLine = z.Groups["match"].Value;
}
LG
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Mi 30.03.11 20:37 
Was mich einfach mal interessiert:
warum wird bei so einer Anwendung der Regex eigentlich diese immer mit dem Schießen von Kanonen auf Spatzen verglichen?
Ich meine, ist es denn wirklich besser, den String mit Stringoperationen zu bearbeiten? Eigentlich kann man doch alle Sachen mit fundamentalen Mitteln bewerkstelligen, oder?

Was ist denn daran so overhead? Dann könnte ich auch viele LinQ-Ausdrücke einfch mal als gleiches ansehen, denn ich kann vieles davon auch als Scheife(n) mit Abbruchbedingung(en) implementieren. Nur dass der Code dann definitiv länger wird.

Bitte nicht als Kritik sehen, aber habe das schon oft in Verbindung mit regulären Ausdrücken gelesen...
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 31.03.11 09:48 
In einem gewissen Sinne kann ich solche Aussagen schon verstehen: Reguläre Ausdrücke sind eine neue Sprache, LINQ ein neues Paradigma. Wenn man bei einem Anfänger davon ausgeht, dass derjenige noch keinen Kontakt damit hatte, sollte es schon ein nicht-triviales Problem sein, damit sich der Lernaufwand dieser doch etwas fortgeschrittenen Techniken lohnt. Letztendlich wird man als ernsthafter Programmierer aber natürlich an beiden nicht vorbei kommen, und ab dann gibt es kein Halten mehr ;) .

_________________
>λ=
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 31.03.11 10:13 
Auch mir fällt es noch schwer schnell zu verstehen was ein RegEx-Ausdruck macht. Und ich kann die immer noch nicht wirklich aus dem Kopf erstellen. Ich finde das erhöht die Lesbarkeit von Code nicht unbedingt. Zudem ist es insbesondere in so trivialen Fällen vermutlich auch langsamer (gut, das ist meistens nicht so wichtig).

LINQ finde ich immer noch einfacher lesbar, auch wenn ich auf vieles was ich da an Code sehe sicher nicht so schnell kommen würde (wenn ich es selbst schreiben wollte).
Ogrus Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 31.03.11 18:38 
ok, danke erstmal für die vielen Antworten. Hab es jetzt mit der Split-Methode hinbekommen, weil ich den Regex-Ausdruck nicht wirklich verstanden hab.^^