Laden...

C# Textdatei auslesen und Stellen via Regex Replace anpassen

Erstellt von Kai10 vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.328 Views
K
Kai10 Themenstarter:in
1 Beiträge seit 2019
vor 5 Jahren
C# Textdatei auslesen und Stellen via Regex Replace anpassen

Hallo,

vielen Dank für die Aufnahme im Forum.

Ich möchte langsam in C# einsteigen und erstelle hierzu auch meine ersten kleinen Projekte.

Ich bin gerade dabei eine Textdatei mit C# auszulesen und eine bestimmte Zeichenfolge bzw. einen bestimmten Text anzupassen.

Mein Problem:

Ich habe folgende Zeichenkette in der Textdatei.

Book:Kosten IBANNr="1234567" Betrag="5.55"

Jetzt möchte ich die oben geschriebene Zeichnkette überprüfen. Falls dies trifft, dann soll alles gleich bleiben, bis auf das Wort "Betrag" soll "Betrag10" lauten.

Ich kann leider nicht das Wort 'Betrag' suchen, da es mehrere Gruppen existieren, die das Wort benutzen. Aus diesem Grund muss ich überprüfen, ob der String mit Book:Kosten IBANNr anfängt.
Allerdings kann sich der Wert bei IBANNr ändern.

Folgende Regex Funktion habe ich bereits experimentiert.

 newString = line.Replace("Book:Kosten IBANNr=/"*/" Betrag=", "Book:Kosten IBANNr=/"*/" Betrag10=");

Wenn ich mit dieser Konstellation die IBANNr ausschriebe mit dem Wert, dann funktioniert es.
Da sich der Wert allerdings ändert, möchte ich es sozusagen nicht mitberechnen.

Kann mir vielleicht jemand ein Tipp geben?

Vielen Dank im Voraus

1.029 Beiträge seit 2010
vor 5 Jahren

Hi,

für mich geht das Problem leider nicht klar hervor.

Grundsätzlich sieht es so aus, als ob du alles zeilenweise einliest und verarbeitest - das ist ja ok so.

Somit kannst du problemlos im Rahmen einer If-Bedingungen mit string.StartsWith prüfen, ob die Ziele entsprechend anfängt und nur in diesem Fall etwas mit string.Replace ersetzen.

Falls diese if-Bedingung unübersichtlich wird kann ich dir persönlich nur empfehlen dich mit "Regex" auseinanderzusetzen. Ist ein recht abstraktes System zur Analyse und ggf. Ersetzung von Strings, dass dir hier sicher gute Dienste leisten würde. (Da wird ne halbe Stunde dich nicht zum Meister machen - aber es lohnt sich da etwas Arbeit reinzustecken)

LG

2.079 Beiträge seit 2012
vor 5 Jahren

Was Regex angeht, ist dieser Artikel Gold wert: [Artikel] Regex-Tutorial

Und ich würde es ganz stumpf so machen: https://regex101.com/r/fqORfX/1
Das matcht die komplette Zeile und versieht den Teil vor und nach "Betrag" mit Gruppen und auf diese Gruppen kann ich beim Replace zurück greifen.

var line = "Book:Kosten IBANNr=\"1234567\" Betrag=\"5.55\"";
var pattern = @"^(.*)Betrag(.*)$";
var replace = "$1Betrag10$2";

Regex.Replace(line, pattern, replace);

Die Patterns für den Teil vor bzw. nach "Betrag" kannst Du dann ja noch konkretisieren, oder auch den Test "Betrag" selber variabler gestalten.

Das "$1" und "$2" dient als Platzhalter für die Gruppen, anstelle dieser Platzhalter wird dann der Wert der jeweiligen Gruppe rein geschrieben. "$0" gibt's auch, aber das repräsentiert den kompletten gematchten String.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.