Autor |
Beitrag |
Ogrus
Hält's aus hier
Beiträge: 12
|
Verfasst: 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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
Hält's aus hier
Beiträge: 12
|
Verfasst: Mi 30.03.11 18:36
und wie bekomm ich den Teilstring, wenn das jedes mal ein anderer ist ?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 30.03.11 19:34
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: 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:
C#-Quelltext 1: 2:
| var regex = new Regex("(?<match>(.*?;){3})"); var regex = new Regex("(?<match>(.*?;){2}[^;]*)?"); | Anwendung dann wie folgt:
C#-Quelltext 1: 2: 3: 4: 5:
| var match = regex.Match(line); if (match.Success) { string newLine = z.Groups["match"].Value; } | LG
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: 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
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: 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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
Hält's aus hier
Beiträge: 12
|
Verfasst: 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.^^
|
|