Base -> Eintrag in einem Feld -> überflüssige Leerzeichen entfernen

Hallo *,

Ausgangslage:
1) Base -> Tabelle mit einem Feld bzw. Feldtyp "Text [VARCHAR]"
2) Über ein Formular erfolgt der Eintrag in das o.g. Feld

Problem:
1) Der Eintrag in dem Feld der Tabelle enthält neben dem eigentlichen Text auch Leerzeichen (rechts neben dem Text).
2) Diese Leerzeichen stören bei der Filterung der Tabelle (z.B. im Rahmen von Makro-gesteuerten Abfragen in Formularen).

Workaround:
Bei manueller Bearbeitung des Feldeintrages in der Tabelle, d.h. manueller Entfernung der rechts stehenden Leerzeichen funktioniert die Filterung.

Ziel:
1) Eintrag in das Feld der Tabelle ohne rechts stehenden Leerzeichen oder
2) Makro, das die Felder einer Tabelle von den rechts stehenden Leerzeichen befreit oder
3) ganz anderer Lösungsansatz

Hat jemand eine Idee?

LO: LibreOffice 3.5.3
OS: Windows 7 Prof 64 Bit

Gruß

Jochen

Hallo Jochen,

1) Eintrag in das Feld der Tabelle ohne rechts stehenden Leerzeichen oder

Standardmäßig ist das so. Die Leerzeichen produzierst Du selbst - es sei
denn, dass das Feld nicht VARCHaR sondern CHAR ist.

2) Makro, das die Felder einer Tabelle von den rechts stehenden
Leerzeichen befreit oder

Wenn Du das Feld ausliest kannst Du über Trim(Text) den Text von allen
Leerzeichen vor und hinter dem Text befreien.

Gruß

Robert

Hallo Robert,

1) Eintrag in das Feld der Tabelle ohne rechts stehenden Leerzeichen oder

Standardmäßig ist das so.

Was ist standardmäßig so: Eintrag der Leerzeichen?

Die Leerzeichen produzierst Du selbst

Wann bzw. bei welchem Schritt produziere ich die Leerzeichen?

es sei denn, dass das Feld nicht VARCHaR sondern CHAR ist.

Meinst Du den Feldtyp "Text (fix) [CHAR]"?

Ich habe dies auch schon getestet - allerdings als nachträglichen Eintrag. Dies hat nicht die Leerzeichen entfernt.
Möglicherweise habe ich nicht konsequent genug getestet.
Frage1 : kann ich den Feldtyp nachträglich ändern?
Frage2: sollten dann bei einem Neueintrag die Leerzeichen weg sein?

2) Makro, das die Felder einer Tabelle von den rechts stehenden
Leerzeichen befreit oder

Wenn Du das Feld ausliest kannst Du über Trim(Text) den Text von allen
Leerzeichen vor und hinter dem Text befreien.

Auch die TRIM-Funktion bin ich auch schon gestoßen. Soll ich dies in die Abfrage einbauen?

Dann habe ich noch eine Frage
dummerweise werden in das Feld zwei oder drei Texte eingebaut (Beispiel: "VW AG" oder "The document foundation").
Frage: greift da auch die o.g. Problemlösung?

Gruß

Jochen

Hallo Jochen,

1) Eintrag in das Feld der Tabelle ohne rechts stehenden Leerzeichen
oder

Standardmäßig ist das so.

Was ist standardmäßig so: Eintrag der Leerzeichen?

Standardmäßig werden keine Leerzeichen produziert.

Die Leerzeichen produzierst Du selbst

Wann bzw. bei welchem Schritt produziere ich die Leerzeichen?

Eigentlich geht das nur, wenn DU [CHAR] gewählt hast. Der Datentyp füllt
gegebenenfalls die Felder mit Leerzeichen auf, wenn nicht genug Zeichen
drin sind.
Ansonsten kann das nur über
- eingelesene Werte mit Leerzeichen oder
- Betätigung der Leertaste
kommen. Alle andere wäre ein fehlerhaftes Programm.

es sei denn, dass das Feld nicht VARCHaR sondern CHAR ist.

Meinst Du den Feldtyp "Text (fix) [CHAR]"?

Ja, genau der erzeugt gegebenenfalls Leerzeichen, wenn nicht genug
eingetragen ist.

Ich habe dies auch schon getestet - allerdings als nachträglichen
Eintrag. Dies hat nicht die Leerzeichen entfernt.
Möglicherweise habe ich nicht konsequent genug getestet.
Frage1 : kann ich den Feldtyp nachträglich ändern?
Frage2: sollten dann bei einem Neueintrag die Leerzeichen weg sein?

Wenn Du diesen Typ erst einmal gewählt hast, dann hast Du die
Leerzeichen drin. Gehst Du zurück nach [VARCHAR], so bleiben die
Leerzeichen drin.
Auf keinen Fall also auf CHAR ändern. Das bekommst Du nur mühsam
händisch raus oder über einen entsprechenden Update-Befehl.
Ins Unreine formuliert:
UPDATE TABLE "Tabellenname" SET "Feldname" = RTRIM("Feldname")
... wobei mit RTRIM die Lerrzeichen rechts vom Feldinhalt beseitigt werden.

2) Makro, das die Felder einer Tabelle von den rechts stehenden
Leerzeichen befreit oder

Wenn Du das Feld ausliest kannst Du über Trim(Text) den Text von allen
Leerzeichen vor und hinter dem Text befreien.

Auch die TRIM-Funktion bin ich auch schon gestoßen. Soll ich dies in die
Abfrage einbauen?

Nein, nicht in die Abfrage. Da habe ich an das Makro gedacht, das Du
angesprochen hast. TRIM(Text) gehört in die Basic-Makros.
TRIM(BOTH FROM "Tabellenfeld") wäre die Umsetzung in der HSQLDB.
Ansonsten gehts auch mit LTRIM(RTRIM("Tabellenfeld")) - SQL-Funktion.

Dann habe ich noch eine Frage
dummerweise werden in das Feld zwei oder drei Texte eingebaut (Beispiel:
"VW AG" oder "The document foundation").
Frage: greift da auch die o.g. Problemlösung?

Meinst Du jetzt die Leerzeichen am Ende? Die werden so entfernt.
Leerzeichen im Text selbst verschwinden somit natürlich nicht.

Gruß

Robert

Hallo Robert,

es sei denn, dass das Feld nicht VARCHaR sondern CHAR ist.

Verständnis- bzw. Klärungsfrage:

Vorgabe für ein Feld in einer Tabelle mit folgende Einstellungen:
Feldtyp "Text [VARCHAR]"
Länge: 50

Was passiert mit den Leerzeichen für folgende Einträge:

"Base" -> vier Buchstaben und keine Leerzeichen.

"VW AG" -> vier Buchstaben und ein (1) Leerzeichen zwischen "VW" und "AG"; ansonsten keine Leerzeichen.

"The document foundation" -> 21 Buchstaben und insgesamt zwei Leerzeichen - ein Leerzeichen zwischen "The" und "document" sowie ein Leerzeichen zwischen "document" und "foundation"; ansonsten keine Leerzeichen.

Wenn das so wäre, würde mich interessieren, wie Base erkennt, dass der Eintrag einmal ein, einmal zwei und einmal drei Wörter enthält und konsequent immer die rechten überflüssigen Leerzeichen entfernt.

Was ist, wenn ein "Wort" eine Zahl ist?
Was ist, wenn ein "Wort" nur einen Buchstaben enthält (wie z.B. die Adresse "Fantasiestrasse 1" oder den Text "I´m a boy")?

Gruß

Jochen

Hallo Jochen,

Wenn das so wäre, würde mich interessieren, wie Base erkennt, dass
der Eintrag einmal ein, einmal zwei und einmal drei Wörter enthält

Braucht es nicht:

und konsequent immer die rechten überflüssigen Leerzeichen entfernt.

Es muss ja nur schauen, ob das letzte (rechte) Zeichen ein Leerzeichen
ist und muss dann den Text um ein Zeichen kürzen. Diese Prüfung muss
solange wiederholt werden, bis das äußerste rechte Zeichen kein
Leerzeichen mehr ist.

An die Leerzeichen im "inneren" muss es ja gar nicht ran.

Gruß,
Michael

Hallo Jochen,

Verständnis- bzw. Klärungsfrage:

Vorgabe für ein Feld in einer Tabelle mit folgende Einstellungen:
Feldtyp "Text [VARCHAR]"
Länge: 50

Was passiert mit den Leerzeichen für folgende Einträge:

"Base" -> vier Buchstaben und keine Leerzeichen.

"VW AG" -> vier Buchstaben und ein (1) Leerzeichen zwischen "VW" und
"AG"; ansonsten keine Leerzeichen.

"The document foundation" -> 21 Buchstaben und insgesamt zwei
Leerzeichen - ein Leerzeichen zwischen "The" und "document" sowie ein
Leerzeichen zwischen "document" und "foundation"; ansonsten keine
Leerzeichen.

Wenn das so wäre, würde mich interessieren, wie Base erkennt, dass der
Eintrag einmal ein, einmal zwei und einmal drei Wörter enthält und
konsequent immer die rechten überflüssigen Leerzeichen entfernt.

UPDATE "Tabellenname" SET "Feldname" = RTRIM("Feldname")

entfernt alle nicht Leerzeichen rechts von dem enthaltenen Text/Zahl. Es
wird also einfach nur hinten abgeschnitten, nicht in der Mitte.

Das kannst Du testen, indem Du in einem Varchar-Feld die Einträge der
obigen Art machst und dabei konsequent z.B. 5 Leerzeichen hinten
anfügst. Du kannst es genauso gut testen, indem Du ein CHAR-Feld nimmst.
Hier ein Beispiel:

SELECT "Text_fix_25", RTRIM("Text_fix_25"), LENGTH("Text_fix_25"),
LENGTH(RTRIM("Text_fix_25")) FROM "Tabelle1"

Das Feld heißt "Text_fix_25" - also feste Zeichenbreite, 25 Zeichen auf
jeden Fall, Rest aufgefüllt mit Leerzeichen. Die 2. Spalte zeigt den
gleichen Inhalt - die Leerzeichen kannst Du ja nicht sehen, höchstens
daran erkennen, wenn Du in die jeweilige Zelle mit dem Cursor gehst. Die
3. Spalte zeigt für alle Felder, in denen etwas steht, '25' an. Die 4.
Spalte zeigt die Breite des tatsächlichen Textes abzüglich der
Leerzeichen rechts an. Hast Du z.B. in einem Feld "1 2 3" stehen, so
gibt Spalte 3 brav '25' aus, Spalte 4 hingegen '5' (3 Ziffern und zwei
Leerzeichen zwischen den Ziffern).

Was ist, wenn ein "Wort" eine Zahl ist?
Was ist, wenn ein "Wort" nur einen Buchstaben enthält (wie z.B. die
Adresse "Fantasiestrasse 1" oder den Text "I´m a boy")?

Kannst Du alles mit der obigen Abfrage testen.
Ich habe mir dafür eine Test-Datenbank angelegt. Da kann ich dann eben
ein Feld zu einer Tabelle hinzufügen und Funktionen ausprobieren. Die
Funktionen stehen alle im Handbuch/Anhang.

Gruß

Robert

Hallo Michael,

An die Leerzeichen im "inneren" muss es ja gar nicht ran.

Jetzt hat es "klick" gemacht:
Base geht in einem Datenfeld ganz nach rechts und prüft, ob ein Leerzeichen vorhanden ist.
Wenn ja: Löschung des Leerzeichens und erneute Prüfung.
Wenn nein: Prozedur wird beendet.

Eigentlich ganz einfach. Ich war auf dem Schlauch gestanden. Dies hängt damit zusammen, dass ich gerade eine Datenbank erstelle bzw. auf "Vordermann" bringe und auf "tausende" Probleme stoße bzw. nicht weiß, wo ich zuerst aufräumen soll.

Gruß

Jochen

UPDATE "Tabellenname" SET "Feldname" = RTRIM("Feldname")

entfernt alle nicht Leerzeichen rechts von dem enthaltenen Text/Zahl. Es

???^^^^^^???

Jeder kann sich 'mal vertan.

Übrigens: Der Text sollte zuerst "nicht sichtbare Zeichen" heißen. Beim
Löschen ist das "nicht" von mir übersehen worden. Aber dafür eine ganze
Mail zu zitieren und nur mit Fragezeichen darauf hinzuweisen, sonst aber
nichts beizutragen zu haben ...

Gruß

Robert

Hallo Michael,

> An die Leerzeichen im "inneren" muss es ja gar nicht ran.

Jetzt hat es "klick" gemacht:
...

Eigentlich ganz einfach. Ich war auf dem Schlauch gestanden.

Passiert mir auch öfter :wink:

Manchmal hilft es, wenn man selber mal programmiert hat (vor gefühlt
1000 Jahren). Insbesondere wenn das Programm Benutzereingaben auswerten
muss: Da lernt man die Feinheiten der "String-Bereinigung" :wink:

Dies
hängt damit zusammen, dass ich gerade eine Datenbank erstelle bzw.
auf "Vordermann" bringe und auf "tausende" Probleme stoße bzw. nicht
weiß, wo ich zuerst aufräumen soll.

Ja, das kenne ich auch... Manchmal hilft eine Geschichte :wink:

http://www.blogigo.de/twentysixseven/Die-Strassenfeger-Geschichte-nehmt-euch-Zeit/7016/

Gruß,
Michael

Manche Leute sind dankbar, wenn man kurz und schmerzlos auf so einen
"Vertipper" hinweist ...