Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Torsten. am April 19, 2023, 17:22:22

Titel: Leerzeichen rechts abschneiden
Beitrag von: Torsten. am April 19, 2023, 17:22:22
Hallo zusammen,
könnt Ihr mir bitte behilflich sein und den vorhandenen Code statt für links auf rechts abändern.
Ich verstehe die Logik dahinter nicht und benötige somit Eure Hilfe.
Option Compare Database
Option Explicit

'If Left$(strText, 1) = " " Then / Leerzeichen am Anfang werden entfernt

Function LeerzeichenWeg(strText As String) As String
    Dim I As Integer
   
    For I = 1 To Len(strText)
        If Left$(strText, 1) = " " Then
            strText = Right$(strText, Len(strText) - 1)
          Else
            Exit For
        End If
    Next I
    LeerzeichenWeg = strText
End Function


Gruß Torsten
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: MzKlMu am April 19, 2023, 17:39:36
Hallo,
oder einfach so:
Function LeerzeichenWeg(strText As String) As String
    LeerzeichenWeg = Trim(strText)
End Function
Entfernt alle Leerzeichen vorn und hinten.
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: andyfau am April 19, 2023, 19:19:25
...oder Rtrim(... entfernt nur rechts.

Gruß
Andreas
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: MzKlMu am April 19, 2023, 19:20:55
... oder LTrim(... entfernt nur links.  ;D  ;)  :)
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: Torsten. am April 20, 2023, 08:36:51
Guten Morgen,
vielen Dank für die "einfache" Lösung.

Ich möchte Euch bitten den von mir angezeigten Code von left nach right umzuschreiben, damit ich nachvollziehen kann was geändert werden muß.
Ich habe gestern eine längere Zeit versucht den Code anzupassen - leider ohne Erfolg.
Ich würde das Ergebnis gerne sehen um die Logik dahinter zu verstehen.

Vorab vielen Dank.

Gruß Torsten
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: MzKlMu am April 20, 2023, 09:04:45
Hallo,
hast du schon mal versucht den Code im Einzelschritt zu durchlaufen?
Dazu Stopp Zeile einfügen mit F8 geht es dann weiter.
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: Torsten. am April 20, 2023, 09:13:08
Hallo,
ich werde es probieren:
Wo finde ich:
ZitatStopp Zeile einfügen
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: MzKlMu am April 20, 2023, 09:23:56
Hallo
die Stopp Zeile musst du selbst einfügen

Offensichtlich hast du keine Kenntnisse von VBA, dann wird das natürlich etwas schwieriger.
Tip: Für Rechts musst du von hinten anfangen.
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: Beaker s.a. am April 20, 2023, 09:44:16
Hallo Torsten,
ZitatIch möchte Euch bitten den von mir angezeigten Code von left nach right umzuschreiben
Hat Klaus doch in #1 schon gemacht. Musst du nur noch das "L" ergänzen, s. #3.

gruss ekkehard
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: Torsten. am April 20, 2023, 09:53:22
Hallo Klaus, jetzt bleibe ich dran  ;)
Richtig keine Erfahrung...

Zitatdie Stopp Zeile musst du selbst einfügen
Wie sieht die Stopp Zeile geschrieben aus?

ZitatTip: Für Rechts musst du von hinten anfangen.
Ja, beim probieren habe ich auch ein Augenmerk auf die Zahlen gelegt, gehe aber davon aus das aus
If Left$(strText, 1) --> If Right$(strText, 1)wird und aus
strText = Right$(strText, Len(strText) - 1 --> strText = Left$(strText, Len(strText) - 1 wird.
Ist der Gedanke mit dem vertauschen von Left/Right der falsch weg, "nur" die Zahlen anpassen?

@ Ekkehard
Ja das habe ich gesehen und bestätigt, ich möchte aber verstehen wie der o.g. Code für Right ist, daher meine Nachfragen.

Gruß Torsten
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: Beaker s.a. am April 20, 2023, 11:01:28
Hast du mal den Cursor auf die Funktion (Left/Right) gesetzt und F1 gedrückt?
Ach ja
...
Stop
...
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: andyfau am April 20, 2023, 11:15:25
Angesichts der vorhandenen Funktionen Trim/R-und LTrim sollte der anfangs gezeigte Code schlicht eingestampft werden.

Als Anfangslekture für VBA gibt es da z.B.

https://www.vba-tutorial.de/ (https://www.vba-tutorial.de/)
 
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: MzKlMu am April 20, 2023, 12:07:02
Hallo,
hier mal für rechte LZ.

Function LeerzeichenWeg(strText As String) As String
Dim I As Integer
    For I = Len(strText) To 1 Step -1 'von hinten anfangen
        If Right$(strText, 1) = " " Then
            strText = Left$(strText, Len(strText) - 1)
          Else
            Exit For
        End If
    Next I
    LeerzeichenWeg = strText
End Function
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: Torsten. am April 20, 2023, 13:45:47
Hallo Klaus,
vielen Dank für die Änderung.

Ich habe vorhin bei meinen Proben einfach Left$ und Right$ ausgetauscht, ohne wie gestern an den Zahlen herum zu probieren. Das hat dann funktioniert siehe Code:
Option Compare Database
Option Explicit

'If Right$(strText, 1) = " " Then / Leerzeichen am Ende werden entfernt

Function LeerzRechtsWeg(strText As String) As String
    Dim I As Integer
       For I = 1 To Len(strText)
        If Right$(strText, 1) = ")" Then
            strText = Left$(strText, Len(strText) - 1)
          Else
            Exit For
        End If
    Next I
    LeerzRechtsWeg = strText
End Function

Nun hast Du in Deinem Code die folgende Zeile zusätzlich geändert:
For I = Len(strText) To 1 Step -1 'von hinten anfangen
Würdest Du bitte versuchen mir das noch zu erklären?

Gruß Torsten
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: Beaker s.a. am April 20, 2023, 14:27:50
Was gibt es da noch zu erklären, was denkst du wozu Klaus den
Kommentar dazu geschrieben hat.
Und warum willst du jetzt plötzlich eine ")" löschen? Es ging
doch um Leerzeichen.
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: Beaker s.a. am April 20, 2023, 14:37:37
Muss mich nochmal reinhängen. Das geht doch auch viel kürzer, -
abgesehen von den eingebauten Funktionen Left und Right
Function LeerzRechtsWeg(strText As String) As String
        Do While Right$(strText, 1) = " "
            strText = Left$(strText, Len(strText) - 1)
        Loop
    LeerzRechtsWeg = strText
End Function
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: MzKlMu am April 20, 2023, 14:46:47
Hallo,
For I = Len(strText) To 1 Step -1 'von hinten anfangenBrauchst Du für diese Zeile wirklich eine Erklärung ?
Ich halte das für selbsterklärend, zumal da noch der Kommentar "'von hinten anfangen" anfangen dabei steht.
Versuche es einfach mal mit nachdenken.  :)

If Right$(strText, 1) = ")" ThenWie kommst Du hier auf eine schließende Klammer ? Du willst doch Leerzeichen tauschen.



@ekkehard
Es geht ihm ja nicht um kürzer oder so, er will ja den Originalcode verstehen.
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: Torsten. am April 20, 2023, 15:40:34
@klaus
@Beaker
@MzKlMu
If Right$(strText, 1) = ")" ThenDa habe ich durch probieren und testen es vergessen für die Antwort auf Leerzeichen zurückzustellen.

@MzKlMu
ZitatIch halte das für selbsterklärend, zumal da noch der Kommentar "'von hinten anfangen" anfangen dabei steht.
Versuche es einfach mal mit nachdenken.
Wenn Du wüßtes wie mir der Kopf raucht für die für Euch einfachsten Sachen.
For I = Len(strText) To 1 Step -1 'von hinten anfangenWenn ich die Zeile interpretieren soll muß ich sie verstehen:
Das versuche ich indem ich in Google für
For I = Len(strText)oder
To 1 Step -1die Zeilen eingebe um zu verstehen was da gemeint ist. Nur da finde ich nichts was ich verstehen und zuordnen kann. Da helfen auch keine Hinweise wie z.B.
ZitatAls Anfangslekture für VBA gibt es da z.B.
, also kann ich nur Euch fragen und um Erklärungen bitten...

Gruß Torsten

Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: Beaker s.a. am April 20, 2023, 16:42:23
Na gut,
For I = Len(strText) 'For startet eine Schleife, in der I bei jedem Durchlauf die Länge des Strings
strText festhält.
Die Schleife läuft theoretisch solange bis der String nur noch ein Zeichen enthält,
weil der String ja durch das Abschneiden immer kürzer wird. Dazu kommt es aber nur,
wenn der übergebene String nur aus Leerzeichen besteht. Ansonsten wird die Schleife
verlassen sobald ein Zeichen <> Leerzeichen auftaucht.
ZitatTo 1 Step -1
Also wenn der String 10 Zeichen lang ist und am Ende zwei Leerzeichen stehen läuft
die Schleife bis I = 8.
ZitatDa helfen auch keine Hinweise wie z.B.
Vielleicht hilft ja der Hinweis auf die Taste F1.
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: Torsten. am April 20, 2023, 17:00:53
Hallo Beaker,
vielen Dank für die sehr verständliche Erklärung, die ich nachvollziehen kann.
Ebenfalls ist der Hinweis mit der F1-Taste sehr hilfreich - die Hilfe hatte ich nie benutzt da sie mir nicht bekannt war.

Ich werde mir Deinen letzten Code speichern und nutzen.

Jetzt werde ich mich dem Problem widmen warum dieses rechte Leerzeichen überhaupt vorhanden ist.
Es entsteht durch den Import einer vom Hersteller zur Verfügung gestellten Excell-Tabelle.

Dazu melde ich mich die nächsten Tage.

Vielen Dank an alle für die Hilfe.

Gruß Torsten
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: Beaker s.a. am April 20, 2023, 17:14:29
ZitatIch werde mir Deinen letzten Code speichern und nutzen.
Wozu?
Warum verwendest du nicht die implementierten Funktionen Left und Right?
Wurde dir doch mehrfach ans Herz gelegt.
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: Torsten. am April 21, 2023, 13:11:12
Hallo zusammen,
ich möchte das Thema nochmal öffnen, da in dem Zusammenhang ein weiteres Problem besteht:
Anbei eine Excell-Datei in der zu ersehen ist das am Ende kein Leerzeichen sondern ein Leerfeld ist - evtl. ein Zeilenumbruch?
In der angehängten DB in der Tabelle _Hinweis sind weitere Informationen hinterlegt.

Ich bitte Euch um weitere Hilfe.

Gruß Torsten
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: Beaker s.a. am April 21, 2023, 16:39:56
Hallo Torsten,

Das sind keine Leerzeichen im Feld "Funktionsprinzip". Das ist ein TAB, wird
jedenfalls in meiner Textverarbeitung als solches angezeigt.
Löschen geht mit
Function LeerzeichenWeg(strText As String) As String
    LeerzeichenWeg = Mid(strText, 1, Len(strText) - 2)
End Function
Besser wäre es allerdings, wenn man den Ersteller der Excel-Datei dazu überreden
könnte eine "saubere" zur Verfügung zu stellen.

gruss ekkehard
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: Torsten. am April 21, 2023, 17:40:23
Hallo Ekkehard,
der Code bewirkt das in jedem Datensatz das letzte rechte Zeichen entfernt wird, dass ist aber nicht gewünscht.
Hast Du eine weitere Möglichkeit?

Gruß Torsten
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: Beaker s.a. am April 21, 2023, 18:04:11
Function LeerzeichenWeg(strText As String) As String
    If Right(strText, 2) = "  " Then
        LeerzeichenWeg = Left(strText, Len(strText) - 2)
    Else
        LeerzeichenWeg = strText
    End If
End Function
Frag mich nicht, warum ich beim letzten Mid verwendet habe; und sorry wegen
des vergessenen Else-Zweigs.
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: Torsten. am April 22, 2023, 09:02:14
Moin Ekkehard,
funktioniert leider nicht.
Hattest Du den Code in der angehängten testzip (#21) geprüft und funktionierte es bei Dir?

Du hast 2 Leerzeichen drin...
If Right(strText, 2) = "  " Then
Ich habe es mit einem Tab-Zeichen probiert
If Right(strText, 2) = " " Thendas brachte auch kein Erfolg.

Gruß Torsten
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: MzKlMu am April 22, 2023, 10:34:29
Hallo,
wo ist denn da ein Tab Zeichen?

Du musst den ASCII Code der letzten Zeichen ermitteln und dann gezielt löschen.
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: Torsten. am April 22, 2023, 12:29:07
Hallo Klaus,
hat Ekkehard festgestellt #22
ZitatDas sind keine Leerzeichen im Feld "Funktionsprinzip". Das ist ein TAB, wird
jedenfalls in meiner Textverarbeitung als solches angezeigt.

Wie kann man einen Ascii Code ermitteln wenn man kein Zeichen hat? In der Ascii-Tabelle hat jeder Code ein Zeichen - außer 032 (was ich als Leerzeichen werten würde).
Hast Du einen Vorschlag?

Gruß Torsten
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: MzKlMu am April 22, 2023, 12:41:30
Hallo,
was hat Ekkehard festgestellt ?
ZitatIch habe es mit einem Tab-Zeichen probiert
If Right(strText, 2) = "    " ThenWas hat diese Zeile mit einem Tab Zeichen zu tun ?

Kommentiere mal in der Funktion alle Zeilen aus.
Lege dann folgendes neu an:
MsgBox Asc(Right(strText, 1)) 'nur diese eine Zeile.
Was wird gemeldet?

PS:
Du solltest Dir unbedingt die Grundlagen zu VBA aneignen.

https://www.vba-tutorial.de/
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: Beaker s.a. am April 22, 2023, 12:43:43
Hallo,

Das TAB-Zeichen ist eine "Erfindung" von mir. Ich hatte die Excel-Datei in eine
.csv exportiert, und diese in Libre-Office-Writer kopiert. Dort wurde das letzte
Zeichen eben als TAB angezeigt.
Die .csv habe ich dann in der accdb verknüpft und per INSERT in die vorhandene
Tabelle eingefügt. Wobei i.Ü. das Leerzeichen im Feld "Ursprungsland" automatisch
verschwindet. Die Prozedur habe ich dann getestet, indem ich einen Feldinhalt
kopiert und im Direktfenster die Prozedur damit aufgerufen habe; - das funzt.
Die Abfrage habe ich gar nicht getestet (schäm). Da funzt es dann leider nicht,
wie gerade festgestellt habe; - sehr komisch. Habe aber herausgefunden wie es
geht (nach Klaus' Hinweis in #26), der Rest hat sich dann überschnitten.
Function LeerzeichenWeg(strText As String) As String
    If Asc(Right(strText, 1)) = 9 Then
        LeerzeichenWeg = Left(strText, Len(strText) - 1)
    Else
        LeerzeichenWeg = strText
    End If
End Function
Die Abfrage muss dann ein UPDATE machen
UPDATE tblArtikelliste AS A
SET A.Funktionsprinzip = Leerzeichenweg(Funktionsprinzip)

gruss ekkehard
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: ebs17 am April 22, 2023, 13:10:31
Ich habe Inhalte aus der Exceltabelle nach Notepad++ kopiert und sehe da am Ende jeweils Zeilenumbrüche.
=> Replace(Content, vbCrLf, "")
ZitatWie kann man einen Ascii Code ermitteln wenn man kein Zeichen hat?
Zeichenweise analysieren.
For i = 1 To Len(Content)
   Debug.Print Asc(Mid(Content, i, 1))
Next

Eine Analyse, was man wirklich hat, sollte nun der erste Schritt sein, besonders wenn eigene Annahmen sich als nicht richtig herausstellen.
Titel: Re: Leerzeichen rechts abschneiden
Beitrag von: Torsten. am April 22, 2023, 13:19:49
Jetzt funktioniert es, prima.

@Klaus:
Ich konnte Dein Vorschlag
MsgBox Asc(Right(strText, 1)) nachvollziehen und die 9 kam raus.

@Ekkehard:
Ich denke das Du mit dem Tab schon richtig gelegen hast, denn der Ascii Code für ein Tab ist lt. Google die 9.

Meine Abfrage in Google:
Zitatwelchen ascii code hat ein tabulator
Die Antwort:
ZitatDas übliche Tabulatorzeichen ist das Horizontaltabulator-Zeichen (HT), das in ASCII und Unicode den Codepunkt 9 hat und als Strg + I...

Vielen Dank für Eure Hilfe, Problem gelöst.

@Ekkehard:
Jetzt noch 3 Punkte in Berlin und wir beide sind zufrieden :)
Titel: OT
Beitrag von: Beaker s.a. am April 23, 2023, 12:00:29
Hallo Eberhard,
ZitatIch habe Inhalte aus der Exceltabelle nach Notepad++ kopiert und sehe da am Ende jeweils Zeilenumbrüche.
Jau, aber als Zeichen davor wurde bei mir so ein Pfeil nach rechts
angezeigt, was ja den TAB repräsentiert und sich ja auch als richtig
herausgestellt hat.
So ist die Prozedur allerdings nicht sehr flexibel. Eine Prüfung gegen
gültige Zeichen wäre da besser.

gruss ekkehard

@Torsten
ZitatJetzt noch 3 Punkte in Berlin und wir beide sind zufrieden :)

?