German Anderes Format für Zahlen

specci48

Well-Known Member
Licensed User
Longtime User
Hallo Paulsche,
Mit dem hier beschriebenen Convertierungs-SUB kann ich ja die Anzeige ins Deutsche Format konvertieren, aber nicht die Eingabe der Daten im deutschen Format vornehmen, richtig ?
Ja.
Denn wenn ich meine CSV-Tabelle im Excel öffne, wird mir der Kilometerstand nicht als 50.000 sondern als 50 angezeigt.
Dies denke ich kann ich nur damit lösen, dass ich einen extra CSV-Export für die Excel-Ausgabe erstelle, wo ich beim Export die ganzen Cellen convertiere, richtig ?
So habe ich das in meinen Programmen auch gelöst.
Kann ich irgendwie gestalten, dass die Eingabe im deutschen Format erfolgen kann oder geht das nicht ? Ich muss halt mit den Cellen auch rechnen können.
Ansonsten müsste ich halt irgenwie verhindern dass im deutschen Format eingegeben werden kann.
Um ständiges umwandeln der Formate zu verhinden (da kommt man nämlich auch schon einmal leicht durcheinander und fördert auch nicht gerade die Performance...) ist es m.E. sinnvoll, im Programm selbst nur das Standardformat zu verwenden und eine separate Exportfunktion zu schreiben.

Um in den Eingabefeldern nur ein bestimmtes Format zuzulassen kann man z.B. auf die fgControls von Filippo zurückgreifen. Dort lassen sich die Textboxen mit individuellen Eingabemasken definierten.

Gruß
specci48
 

Paulsche

Well-Known Member
Licensed User
Longtime User
Hallo Paulsche,

Ja.

So habe ich das in meinen Programmen auch gelöst.

Um ständiges umwandeln der Formate zu verhinden (da kommt man nämlich auch schon einmal leicht durcheinander und fördert auch nicht gerade die Performance...) ist es m.E. sinnvoll, im Programm selbst nur das Standardformat zu verwenden und eine separate Exportfunktion zu schreiben.

Um in den Eingabefeldern nur ein bestimmtes Format zuzulassen kann man z.B. auf die fgControls von Filippo zurückgreifen. Dort lassen sich die Textboxen mit individuellen Eingabemasken definierten.

Gruß
specci48

Danke für die schnelle Antwort, dann weiss ich Bescheid.
Werd mir das fgcontrols mal genauer anschauen.
 

Paulsche

Well-Known Member
Licensed User
Longtime User
Hi, durch diese Routine kann ich ja nun eine Excelkonforme CSV Datei im richtigen Zahlenformat erstellen,
nun will ich aber auch eine CSV Datei wieder importieren,
gibt es dafür auch eine Routine ?
Die vorhandene wandlet ja nicht wieder zurück, so wie ich das gestestet habe.

Wäre toll wenn jemand da wa hätte.
 

Paulsche

Well-Known Member
Licensed User
Longtime User
Eine direkte Möglichkeit das Format beim einlesen der CSV Datei zu ändern gibt es nicht.

Die einzige Lösung die Ich hier sehe ist, nach bem laden der CSV Datei, in den verschiedenen Zellen das Format zu ändern.

Beste Grüsse.

Hi Klaus, ja, das möchte ich ja machen,
ich lade die CSV-Datei in eine extra Tabelle die nur aus Strings besteht,
dann möchte ich die Daten konvertieren, und da bräuchte ich eine Routine, denn mit der "ConvertToGerman" geht es nur in die Richtung von Engl. in German, aber nicht umgekehrt.
 

specci48

Well-Known Member
Licensed User
Longtime User
Hallo Paulsche,

dann spendiere Deinem Modul doch eine ConvertToEnglish-Methode:

B4X:
Sub ConvertToEnglish(value)
   value = StrReplace(value,".","#")
   value = StrReplace(value,",",".")
   Return StrReplace(value,"#",",")
End Sub


Gruß
specci48
 

Paulsche

Well-Known Member
Licensed User
Longtime User
Danke specci48,

werds mal versuchen, ich verstehe in dem StrReplace das dritte Zeichen nicht,

StrReplace(value,".","#")

Das finde ich in keiner Hilfe, dass man da ein drittes Zeichen angeben kann,
wozu ist das gut ?

Z.B. StrReplace(value,",",".") , was bedeutet der Punkt an der dritten Stelle ?

Danke für Deine Geduld
 
Last edited:

specci48

Well-Known Member
Licensed User
Longtime User
Hallo Paulsche,

zum besseren Verständnis beschreibe ich den Vorgang mal kurz verbal:

Funktion des StrReplace:
Dieser Befehl ersetzt in einer beliebigen Zeichenkette (Parameter 1) jedes zuerst angegebenen Zeichen (Paramter 2) durch ein neues Zeichen (Parameter 3).

In unserem Fall (Formatumwandlung) möchten wir aber nun nicht ein einzelnes Zeichen ersetzen, sondern zwei verschiedene Zeichen tauschen!

Deshalb kann man nicht einfach zweimal den Replace aufrufen, z.B. für "123.456,78":
1. ersetze sämtliche Punkte durch Komma => ("123,456,78")
2. ersetze sämtliche Komma durch Punkte => ("123.456.78")
Man erhält ein falsches Ergebnis, da man mit dem zweiten Befehl den ersten teilweise wieder rückgängig macht.

Der Trick besteht nun darin, einen dritten Replace mit einem Hilfszeichen (hier die Raute "#") zu verwenden:
1. ersetze sämtliche Punkte durch das Hilfszeichen => ("123#456,78")
2. ersetze sämtliche Komma durch Punkte => ("123#456.78")
3. ersetze sämtliche Hilfszeichen durch Komma => ("123,456.78")
Auf diese Weise erhält man das gewünschte Ergebnis, natürlich nur unter der Voraussetzung, dass das gewählte Hilfszeichen in der ursprünglichen Zeichenkette nicht enthalten ist.


Gruß
specci48
 

Paulsche

Well-Known Member
Licensed User
Longtime User
Hi Specci48,

ok danke, so wie Du es erklärst, ist es verständlich,

oohhh, :BangHead: jetzt seh ich es erst richtig,
ich sah immer 3 Werte, aber das 2. Komma ist ja die Trennung der
2 Werte, ALLES KLAR JETZT

Danke euch beiden :), hab vor lauter Komma und Hochkomma den Wald
vor Bäumen nicht mehr gesehen.
 

corwin42

Expert
Licensed User
Longtime User
dann spendiere Deinem Modul doch eine ConvertToEnglish-Methode:

Kleiner Scherz?

Man muss doch einfach nur die ConvertToGerman Methode ein zweites mal mit dem String aufrufen, dann konvertiert er doch wieder in das englisch Format zurück. Es werden doch einfach nur . und , vertauscht.

D.h. man muss vorher auch unbedingt wissen, in welchem Format die Zahlen sind.

Gruß,
Markus
 

Paulsche

Well-Known Member
Licensed User
Longtime User
Geht nicht so einfach, beim Rückkonverieren
wird bei mir aus 888.777 nur 888 ,
erst wenn ich das Formatieren der Dezimalstellen weglasse
funktioniertes es richtig, dashalb hab ich ein KonvertToEnglish ohne
Format-Befehl gemacht.
 
Top