Wie entferne ich Leerzeichen um ein Zeichen herum?

8

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%

danke

fabio

    
Fabio Vitale 09.11.2011, 14:47
quelle

10 Antworten

9

Klingt wie eine Aufgabe für TStringList.

%Vor%     
GolezTrol 09.11.2011, 14:55
quelle
4

Eine schnelle Version könnte sein:

%Vor%

Einige Testcodes:

%Vor%     
Arnaud Bouchez 09.11.2011 15:45
quelle
3

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%     
Rob Kennedy 09.11.2011 16:11
quelle
3

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.

    
David Heffernan 09.11.2011 17:23
quelle
1

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).

    
Rob Kennedy 09.11.2011 16:35
quelle
1

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%     
Rafael Piccolo 09.11.2011 16:43
quelle
0

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%     
Hugh Jones 09.11.2011 18:51
quelle
0

Unter Verwendung der Jedi-Code-Bibliothek kann die Antwort von @GolezTrol unter Verwendung eines Einzeilers neu formuliert werden.

%Vor%
Arioch 'The 01.06.2013 16:57
quelle
0

mit dieser Funktion:

%Vor%

Sie können einfach andere Bedingungen hinzufügen.

Zum Beispiel füge ich (' ', ' ') hinzu, um Leerzeichen zwischen Wörtern wie:

zu konvertieren %Vor%     
MohsenB 02.06.2013 20:50
quelle
-2

Geändert, noch einmal.

%Vor%

OK für alle Delphi-Versionen.

    
philnext 09.11.2011 15:01
quelle

Tags und Links