Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
C# Textdatei auslesen und Stellen via Regex Replace anpassen
Kai10
myCSharp.de - Member



Dabei seit:
Beiträge: 1

Themenstarter:

C# Textdatei auslesen und Stellen via Regex Replace anpassen

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Taipi88
myCSharp.de - Member

Avatar #avatar-3220.jpg


Dabei seit:
Beiträge: 1044
Herkunft: Mainz

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Member

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1413
Herkunft: NRW

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Palladin007 am .
private Nachricht | Beiträge des Benutzers