![]() |
StringReplace mit Record ohne Ergebnis
Hallo Leute!
Ich versuche gerade einen MemoText durchsuchen und verändern zu lassen. Eigentlich kein Problem: StringReplace. Ich bekomme aber keine Umwandlung hin... Der Record und das füllen dessen funktioniert ohne Probleme.
Delphi-Quellcode:
Beim durchlauf des Record-Arrays komme ich aber wie gesagt nicht weiter.
type
T_recListEigenschaft = record sParm, sEigenschaft: String; end; Auch mit normalen String-Arrays geht es nicht. Der "normale Replace" funktioniert hingegen ohne Probleme.
Delphi-Quellcode:
for iEins := 0 to MFile.Lines.Count - 1 do
begin sInput := MFile.Lines[iEins]; for iZwei := 0 to Length(arrResult) - 1 do sInput := StringReplace( sInput, arrResult[iZwei].sParm, arrResult[iZwei].sEigenschaft, [rfReplaceAll, rfIgnoreCase] ); sInput := StringReplace(sInput, 'sFind', 'sChange', [rfReplaceAll, rfIgnoreCase]); MFile.Lines[iEins] := sInput; end; Hat jemand ggf. eine Erklärung? G |
AW: StringReplace mit Record ohne Ergebnis
Hallo,
sieht korrekt aus. Breakpoint (F5) / WatchPoint (F7) ?? Die iEins-Schleife könnte man auch weglassen (statt Lines.Count Lines.Text nehmen) Heiko |
AW: StringReplace mit Record ohne Ergebnis
Beim Schrittweise durchgehen kann ich soweit nur feststellen, dass:
|
AW: StringReplace mit Record ohne Ergebnis
Zitat:
|
AW: StringReplace mit Record ohne Ergebnis
Ach so: und die Delphi-Version angeben.
|
AW: StringReplace mit Record ohne Ergebnis
Lass dir ggf. in der iZwei Schleife mal arrResult[iZwei].sParm und arrResult[iZwei].sEigenschaft anzeigen? Daß StringReplace nicht auf ganze Wörter prüft weißt du?
|
AW: StringReplace mit Record ohne Ergebnis
Ich benutzte: Delphi 2009 Update 2 auf meinem Notebook mit Win 7 x64 SP1.
Soweit hab ich nur die Jedi-Komponenten installiert, die ich in dem Projekt aber nicht verwende. In den Input-Zeilen stehen so Texte wie: Zitat:
Im Record sind Elemente gespeichert wie: Zitat:
In der Replace-Schleife habe ich mir gerade nochmal die einzelnen Werte separat ausgeben lassen. Auch iO. |
AW: StringReplace mit Record ohne Ergebnis
Zitat:
Du schreibst nur in einer Kopie des Records rum, welche danach nicht zurückgespeichert, sondern einfach verworfen wird. An den "eigentlichen" Recordvariablen änderst du also nichts und somit bleibt der alte Wert auch erhalten. Fazit: - entweder den Record rauskopieren, ändern und neu in der Liste abspeichern - oder auf Daten-Objekte umstellen (TObjectList, eine Persistent-Collection oder Dergleichen) - oder einen Pointer auf die Records besorgen und darüber den Inahlt ändern |
AW: StringReplace mit Record ohne Ergebnis
Zitat:
|
AW: StringReplace mit Record ohne Ergebnis
Zitat:
|
AW: StringReplace mit Record ohne Ergebnis
Wenn sowohl die Items der Liste als auch die Felder/Methoden des Records public sind kann da eigentlich nichts passieren. Vermute eher mal daß MFile.Lines später nochmal überschrieben wird oder StringReplace "wild" hin und her ersetzt?
|
AW: StringReplace mit Record ohne Ergebnis
Ohhh.
Hmmmm. Na dann würde ich wohl erstmal die Vermutung von Bjoerk teilen. Aber wenn dem so ist, dann erkennt man das ja, wenn man den Code einfach mal schrittweise durchdebuggt. (Haltepunkt in die Schleife und nachsehen, was nach jeder Übersetzung in dem String steht) |
AW: StringReplace mit Record ohne Ergebnis
Wenn man XML-Dateien nur mit Funktionen wie StringReplace oder Regular Expressions bearbeitet dann macht man meistens etwas falsch.
Das mag für einfache XML-Dateien eine zeitlang funktionieren, aber irgendwann kommt ein Fall bei dem es nicht mehr passt. Wenn man es dauerhaft richtig haben möchte braucht man einen XML-Parser. ![]() |
AW: StringReplace mit Record ohne Ergebnis
Wäre da nicht eine XSLT angebracht(er)? Da muss man dann gar nichts mehr selber machen und sicher ist es auch noch.
|
AW: StringReplace mit Record ohne Ergebnis
Zitat:
![]() |
Lösung gefunden!
Ich hab den Fehler soweit gefunden... Eig. schreit das schon fast nach Steinigung.
Beim zu kontrollierenden Parameter hat sich ein leerzeichen am Ende eingeschlichen. In der Übersicht der lokalen Variablen habe ich das nicht gesehen und beim separaten Ausgeben habe ich keine Identifikationszeichen davor und dahin gefügt. Entsprechend habe ich das Leerzeichen dort auch nicht gesehen... :( Die Updates werd ich bei gelegenheit mal einspielen. Im eigentlichen will ich darüber nur Dateinamen in der File finden und ersetzen. Daher deke ich, dass ich nicht gr. mit XML-Elementen arbeiten muss ... Danke für eure Antworten! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz