Sagen Sie, ich habe die folgende Zeichenfolge:
%Vor%Ich möchte die folgende Ausgabe:
%Vor%Im Grunde brauche ich eine Routine, die ALLE Vorkommen von Leerzeichen NUR streift, wenn sie vor oder nach dem Komma-Zeichen (das ist mein Begrenzer) erscheint, intakte Leerzeichen zwischen anderen Wörter.
Jede Hilfe wird sehr geschätzt.
Was halten Sie von dieser Lösung?
%Vor%fabio
Eine schnelle Version könnte sein:
%Vor%Einige Testcodes:
%Vor%Kopieren Sie die Zeichen nacheinander in den Zielpuffer, suchen Sie jedoch nach Leerzeichen und Trennzeichen und notieren Sie sich den letzten Speicherort, an den Sie ein Leerzeichen kopiert haben. Wenn Sie ein Leerzeichen sehen und das letzte Nicht-Leerzeichen, das Sie kopiert haben, das Trennzeichen ist, überspringen Sie das Leerzeichen. Wenn es ein Leerzeichen ist und das letzte Zeichen, das Sie kopiert haben, nicht war, kopieren Sie es an das Ziel, aber merken Sie sich den letzten nicht hinzugefügten Speicherplatz. Auf diese Weise können Sie, wenn Sie später ein Trennzeichen sehen, zurückgehen und es überschreiben.
%Vor%Wenn Sie Delphi XE oder höher verwenden, können Sie dies in einer einzigen Codezeile mit einem regulären Ausdruck tun.
%Vor%Natürlich ist das nicht der schnellste Lauf der angebotenen Lösungen, aber vielleicht ist Ihnen das egal.
Sie können reguläre Ausdrücke verwenden. Sie möchten das Trennzeichen vor oder nach einer beliebigen Anzahl von Leerzeichen finden und es durch eine einzelne Kopie des Trennzeichens ersetzen.
%Vor%Neuere Delphi-Versionen können die integrierte RegularExpressionCore -Einheit verwenden. Ältere Versionen können die entsprechende PerlRegEx-Einheit von Jan Goyvaerts verwenden.
Mick hat bereits gepostet eine Antwort demonstriert dies, aber er löschte es, weil er den regulären Ausdruck falsch hatte (statt alle Leerzeichen) die am Begrenzer angrenzen).
Der einfachste und einfachste Weg ist die Verwendung regulärer Ausdrücke. Das letzte, was Sie brauchen würden, ist ein riesiger komplizierter Codeblock, um solch ein einfaches Problem zu lösen. Unglücklicherweise habe ich Delphi gerade nicht bei mir, ich kann diesen Code nicht testen, aber wenn es nicht genau so ist, ist es sehr nah dran:
%Vor%Ich dachte, das wäre es wert, hinzugefügt zu werden, weil es mit frühen Versionen von Delphi funktionieren wird, was die Stringlisten-Lösung (die ich mochte) nicht tut.
Es ist ziemlich schnell, glaube ich, und ziemlich einfach zu lesen und zu verstehen.
%Vor%