String ( Zahl) Formatieren
Re: String ( Zahl) Formatieren
... nein, ich muss MID nehmen weil der String mit einem ";" endet.
Windows 7x64 Prof , PureBasic 5.20 LTS
- Pelagio
- Beiträge: 424
- Registriert: 11.11.2004 17:52
- Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem - Wohnort: Bremen
Re: String ( Zahl) Formatieren
Es gibt noch eine andere Möglichkeit die eventuell für den Anfängerbereich zu fortgeschritten ist aber als mögliche Studie will ich es aufzeigen:
Code: Alles auswählen
Structure strucWert
Vorsilbe.s{2}
VorkommaZahl.s{8}
NachkommaZahl.s{3}
EndStructure
Structure strucData
StructureUnion
VollString.s{13}
TeilString.strucWert
EndStructureUnion
EndStructure
Test.StrucData
Procedure.d Ergebnis(*vStruc.StrucData)
ProcedureReturn ValD(*vStruc\TeilString\VorkommaZahl + "." + *vStruc\TeilString\nachkommaZahl)
EndProcedure
Test\VollString = "FA00001822420"
Debug Ergebnis(Test)
Test\VollString = "FA00144800000"
Debug Ergebnis(Test)
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS].
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS].

-
- Beiträge: 213
- Registriert: 13.07.2008 10:05
- Computerausstattung: Windows 8.1 Pro
AMD Phenom II X4 955 @ 3.2 GHz
4GB RAM
NVIDIA GeForce GTX 660
Re: String ( Zahl) Formatieren
@Pelagio
Sehr gute Lösung und gewiss schneller die Idee muss ich mir merken kann ich gewiss mal brauchen.
Du machst nun daraus aber Zahlen und keine Strings habe es mal an den Code von elko68 angepasst.
Sehr gute Lösung und gewiss schneller die Idee muss ich mir merken kann ich gewiss mal brauchen.

Du machst nun daraus aber Zahlen und keine Strings habe es mal an den Code von elko68 angepasst.
Code: Alles auswählen
Structure strucWert
Vorsilbe.s{2}
VorkommaZahl.s{8}
NachkommaZahl.s{3}
Semikolon.s{1}
EndStructure
Structure strucData
StructureUnion
VollString.s{14}
TeilString.strucWert
EndStructureUnion
EndStructure
Test.StrucData
Procedure.s Ergebnis(*vStruc.StrucData)
ProcedureReturn LTrim(*vStruc\TeilString\VorkommaZahl + "." + *vStruc\TeilString\nachkommaZahl+" KHz", "0")
EndProcedure
Test\VollString = "FA00001822420"
Debug Ergebnis(Test)
Test\VollString = "FA00144800000"
Debug Ergebnis(Test)
Zuletzt geändert von Christian+ am 01.03.2010 17:27, insgesamt 2-mal geändert.
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660
Re: String ( Zahl) Formatieren
ey, da kann man sich richtig auslassen bei den möglichkeitenPelagio hat geschrieben:Es gibt noch eine andere Möglichkeit die eventuell für den Anfängerbereich zu fortgeschritten ist aber als mögliche Studie will ich es aufzeigen

ist geschmackssache, aber ich würds eher mit einer structure machen. find es übersichtlicher
Code: Alles auswählen
EnableExplicit
Structure strucWert
Vorsilbe.s{2}
VorkommaZahl.s{8}
NachkommaZahl.s{3}
EndStructure
Define Test.s
Procedure.d Ergebnis(*vStruc.strucWert)
ProcedureReturn ValD(*vStruc\VorkommaZahl + "." + *vStruc\NachkommaZahl)
EndProcedure
Test = "FA00001822420"
Debug Ergebnis(@Test)
Test = "FA00144800000"
Debug Ergebnis(@Test)
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: String ( Zahl) Formatieren
wie leiche man doch so ein semikolon übersieht.elko68 hat geschrieben:... nein, ich muss MID nehmen weil der String mit einem ";" endet.
@Pelagio
gute Idee.
mach den Vollstring mal 14 lang, du hast genau wie ich das ";" vergessen.
... und das bringt mich auf noch eine verrückte idee...
da der Platz für das Komma im String vorhanden ist, weil er mit einem Semikolon endet,
können wir auch die letzten drei Zeichen nach hinten schieben und das Komma einfügen.
Code: Alles auswählen
Procedure ChangeString( *Str2Change.String )
PokeC( *Str2Change + 13* SizeOf(Character), PeekC(*Str2Change + 12* SizeOf(Character)))
PokeC( *Str2Change + 12* SizeOf(Character), PeekC(*Str2Change + 11* SizeOf(Character)))
PokeC( *Str2Change + 11* SizeOf(Character), PeekC(*Str2Change + 10* SizeOf(Character)))
PokeC( *Str2Change + 10* SizeOf(Character), Asc(","))
While PeekC( *Str2Change ) < Asc("1") Or PeekC( *Str2Change ) > Asc("9")
PokeC( *Str2Change , Asc(" "))
*Str2Change + SizeOf( Character )
Wend
EndProcedure
a$ = "FA00144800000;"
b$ = "FA00024895000;"
c$ = "FA00001822420;"
ChangeString(@a$)
ChangeString(@b$)
ChangeString(@c$)
Debug a$
Debug b$
Debug c$
wenn man heutzutage eine Methode sieht, die mit ungeprüftem, unbedingtem direkten Speicherzugriff arbeitet, hebt man sein Kreuz und flüstert "weiche!"....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: String ( Zahl) Formatieren


Windows 7x64 Prof , PureBasic 5.20 LTS
Re: String ( Zahl) Formatieren
lol, stimmt auchelko68 hat geschrieben:...wie mann eine Zeile funktionierenden (vieleicht auch nicht optimalen) Code so erweitern kann ist ja schon erstaunlich

aber was mir noch nie aufgefallen ist (habs wahrscheinlich auch noch nie gebraucht), purebasic setzt bei StrD/StrF unabhängig von der ländereinstellung einen punkt als komma. gibts da noch eine einstellung oder eine andere funktion, damit die ländereinstellung berücksichtigt wird?
Re: String ( Zahl) Formatieren
So mal auf die schnelle zusammenkopiert. Windows Only
FF 
Code: Alles auswählen
; Quelle http://support.microsoft.com/kb/221435
; Sprache Gebietsschemabezeichner
; Afrikaans 1078 (&H436)
; Albanisch 1052 (&H41C)
; Arabisch 1025 (&H401)
; Arabisch (Algerien) 5121 (&H1401)
; Arabisch (Bahrain) 15361 (&H3C01)
; Arabisch (Ägypten) 3073 (&HC01)
; Arabisch (Irak) 2049 (&H801)
; Arabisch (Jordanien) 11265 (&H2C01)
; Arabisch (Kuwait) 13313 (&H3401)
; Arabisch (Libanon) 12289 (&H3001)
; Arabisch (Libyen) 4097 (&H1001)
; Arabisch (Marokko) 6145 (&H1801)
; Arabisch (Oman) 8193 (&H2001)
; Arabisch (Katar) 16385 (&H4001)
; Arabisch (Saudi-Arabien) 1025 (&H401)
; Arabisch (Syrien) 10241 (&H2801)
; Arabisch (Tunesien) 7169 (&H1C01)
; Arabisch (Vereinigte Arabische Emirate) 14337 (&H3801
; Arabisch (Jemen) 9217 (&H2401)
; Armenisch 1067 (&H42B)
; Assamisch 1101 (&H44D)
; Aserbaidschanisch (Kyrillisch) 2092 (&H82C)
; Azerbaidschanisch (Lateinisch) 1068 (&H42C)
; Baskisch 1069 (&H42D)
; Belgisch (Niederländisch) 2067 (&H813)
; Belgisch (Französisch) 2060 (&H80C)
; Bengali 1093 (&H445)
; Portugiesisch (Brasilien) 1046 (&H416)
; Bulgarisch 1026 (&H402)
; Birmanisch 1109 (&H455)
; Belarussisch (Weißrussland) 1059 (&H423)
; Katalanisch 1027 (&H403)
; Chinesisch (Hongkong S.A.R.) 3076 (&HC04)
; Chinesisch (Macao S.A.R.) 5124 (&H1404)
; Chinesisch (vereinfacht) 2052 (&H804)
; Chinesisch (Singapur) 4100 (&H1004)
; Chinesisch (traditionell) 1028 (&H404)
; Kroatisch 1050 (&H41A)
; Tschechisch 1029 (&H405)
; Dänisch 1030 (&H406)
; Niederländisch 1043 (&H413)
; Englisch (Australien) 3081 (&HC09)
; Englisch (Belize) 10249 (&H2809)
; Englisch (Kanada) 4105 (&H1009)
; Englisch (Karibik) 9225 (&H2409)
; Englisch (Irland) 6163 (&H1809)
; Englisch (Jamaika) 8201 (&H2009)
; Englisch (Neuseeland) 5129 (&H1409)
; Englisch (Philippinen) 13321 (&H3409)
; Englisch (Südafrika) 7177 (&H1C09)
; Englisch (Trinidad) 11273 (&H2C09)
; Englisch (Großbritannien) 2057 (&H809)
; Englisch (USA) 1033 (&H409)
; Englisch (Simbabwe) 12297 (&H3009)
; Estnisch 1061 (&H425)
; Färöisch 1080 (&H438)
; Farsi 1065 (&H429)
; Finnisch 1035 (&H40B)
; Französisch 1036 (&H40C)
; Französisch (Kamerun) 11276 (&H2C0C)
; Französisch (Kanada) 3084 (&HC0C)
; Französisch (Elfenbeinküste) 12300 (&H300C)
; Französisch (Luxemburg) 5132 (&H140C)
; Französisch (Mali) 13324 (&H340C)
; Französisch (Monaco) 6156 (&H180C)
; Französisch (Réunion) 8204 (&H200C)
; Französisch (Senegal) 10252 (&H280C)
; Französisch (Westindische Inseln) 7180 (&H1C0C)
; Französisch (Kongo, DRK) 9228 (&H240C)
; Friesisch (Niederlande) 1122 (&H462)
; Gälisch (Irland) 2108 (&H83C)
; Gälisch (Schottland) 1084 (&H43C)
; Galizisch 1110 (&H456)
; Georgisch 1079 (&H437)
; Deutsch 1031 (&H407)
; Deutsch (Österreich) 3079 (&HC07)
; Deutsch (Liechtenstein) 5127 (&H1407)
; Deutsch (Luxemburg) 4103 (&H1007)
; Griechisch 1032 (&H408)
; Gujarati 1095 (&H447)
; Hebräisch 1037 (&H40D)
; Hindi 1081 (&H439)
; Ungarisch 1038 (&H40E)
; Isländisch 1039 (&H40F)
; Indonesisch 1057 (&H421)
; Italienisch 1040 (&H410)
; Japanisch 1041 (&H411)
; Kanada 1099 (&H44B)
; Kashmiri 1120 (&H460)
; Kasachisch 1087 (&H43F)
; Khmer 1107 (&H453)
; Kirgisisch 1088 (&H440)
; Konkani 1111 (&H457)
; Koreanisch 1042 (&H412)
; Laotisch 1108 (&H454)
; Lettisch 1062 (&H426)
; Litauisch 1063 (&H427)
; FYROM (Mazedonisch) 1071 (&H42F)
; Malayalam 1100 (&H44C)
; Malaiisch (Brunei Darussalam) 2110 (&H83E)
; Malaiisch 1086 (&H43E)
; Maltesisch 1082 (&H43A)
; Manipuri 1112 (&H458)
; Marathi 1102 (&H44E)
; Mongolisch 1104 (&H450)
; Nepali 1121 (&H461)
; Norwegisch (Bokmål) 1044 (&H414)
; Norwegisch (Nynorsk) 2068 (&H814)
; Oriya 1096 (&H448)
; Polnisch 1045 (&H415)
; Portugiesisch 2070 (&H816)
; Punjabi 1094 (&H446)
; Rätoromanisch 1047 (&H417)
; Rumänisch 1048 (&H418)
; Rumänisch (Moldawien) 2072 (&H818)
; Russisch 1049 (&H419)
; Russisch (Moldavien) 2073 (&H819)
; Samisch (Lappisch) 1083 (&H43B)
; Sanskrit 1103 (&H44F)
; Serbisch (Kyrillisch) 3098 (&HC1A)
; Serbisch (Lateinisch) 2074 (&H81A)
; Sesothisch 1072 (&H430)
; Sindhi 1113 (&H459)
; Slowakisch 1051 (&H41B)
; Slowenisch 1060 (&H424)
; Sorbisch 1070 (&H42E)
; Spanisch (Traditionell) 1034 (&H40A)
; Spanisch (Argentinien) 11274 (&H2C0A)
; Spanisch (Bolivien) 16394 (&H400A)
; Spanisch (Chile) 13322 (&H340A)
; Spanisch (Kolumbien) 9226 (&H240A)
; Spanisch (Costa Rica) 5130 (&H140A)
; Spanisch (Dominikanische Republik) 7178 (&H1C0A)
; Spanisch (Ecuador) 12298 (&H300A)
; Spanisch (El Salvador) 17418 (&H440A)
; Spanisch (Guatemala) 4106 (&H100A)
; Spanisch (Honduras) 18442 (&H480A)
; Spanisch (Nicaragua) 19466 (&H4C0A)
; Spanisch (Panama) 6154 (&H180A)
; Spanisch (Paraguay) 15370 (H3C0A)
; Spanisch (Peru) 10250 (&H280A)
; Spanisch (Puerto Rico) 20490 (&H500A)
; Spanisch (Spanien-Modern) 3082 (&HC0A)
; Spanisch (Uruguay) 14346 (&H380A)
; Spanisch (Venezuela) 8202 (&H200A)
; Sutu 1072 (&H430)
; Suaheli 1089 (&H441)
; Schwedisch 1053 (&H41D)
; Schwedisch (Finnland) 2077 (&H81D)
; Französisch (Schweiz) 4108 (&H100C)
; Deutsch (Schweiz) 2055 (&H807)
; Italienisch (Schweiz) 2064 (&H810)
; Tadschikisch 1064 (&H428)
; Tamil 1097 (&H449)
; Tatarisch 1092 (&H444)
; Telugu 1098 (&H44A)
; Thailändisch 1054 (&H41E)
; Tibetanisch 1105 (&H451)
; Tsonga 1073 (&H431)
; Tswana 1074 (&H432)
; Türkisch 1055 (&H41F)
; Turkmenisch 1090 (&H442)
; Ukrainisch 1058 (&H422)
; Urdu 1056 (&H420)
; Usbekisch (Kyrillisch) 2115 (&H843)
; Usbekisch (Lateinisch) 1091 (&H443)
; Venda 1075 (&H433)
; Vietnamesisch 1066 (&H42A)
; Walisisch 1106 (&H452)
; Xhosa 1076 (&H434)
; Zulu 1077 (&H435)
Procedure.s MyValF(var.f, lcid = $0407)
Protected hr.l, result.s, VarDest.Variant, varSource.Variant
VarSource\vt = #VT_R4
VarSource\fltVal = var
hr = VariantChangeTypeEx_(VarDest, VarSource, lcid, 0, #VT_BSTR)
If hr = #S_OK
result = PeekS(VarDest\bstrVal, #PB_Any, #PB_Unicode)
Else
result = ""
EndIf
VariantClear_(VarDest)
VariantClear_(VarSource)
ProcedureReturn result
EndProcedure
Procedure.s MyValD(var.d, lcid = $0407)
Protected hr.l, result.s, VarDest.Variant, varSource.Variant
VarSource\vt = #VT_R8
VarSource\dblVal = var
hr = VariantChangeTypeEx_(VarDest, VarSource, lcid, 0, #VT_BSTR)
If hr = #S_OK
result = PeekS(VarDest\bstrVal, #PB_Any, #PB_Unicode)
Else
result = ""
EndIf
VariantClear_(VarDest)
VariantClear_(VarSource)
ProcedureReturn result
EndProcedure
MessageRequester("Result", MyValF(100.5))
MessageRequester("Result", MyVald(123456789.12, $0809))

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive