Seite 2 von 2

Re: String ( Zahl) Formatieren

Verfasst: 01.03.2010 15:32
von elko68
... nein, ich muss MID nehmen weil der String mit einem ";" endet.

Re: String ( Zahl) Formatieren

Verfasst: 01.03.2010 16:41
von Pelagio
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)

Re: String ( Zahl) Formatieren

Verfasst: 01.03.2010 16:58
von Christian+
@Pelagio
Sehr gute Lösung und gewiss schneller die Idee muss ich mir merken kann ich gewiss mal brauchen. :allright:
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)

Re: String ( Zahl) Formatieren

Verfasst: 01.03.2010 16:59
von Josh
Pelagio 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
ey, da kann man sich richtig auslassen bei den möglichkeiten :)
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)

Re: String ( Zahl) Formatieren

Verfasst: 01.03.2010 17:20
von Kaeru Gaman
elko68 hat geschrieben:... nein, ich muss MID nehmen weil der String mit einem ";" endet.
wie leiche man doch so ein semikolon übersieht.

@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$
das ist eine Hardcore-Lösung, wie man sie vielleicht in den 70ern gewählt hätte, als noch jedes Byte kostbar war und auf einem Magnetband nur 18KB Platz hatten und jeder Datentransfer noch wirklich Rechenzeit gekostet hat...


wenn man heutzutage eine Methode sieht, die mit ungeprüftem, unbedingtem direkten Speicherzugriff arbeitet, hebt man sein Kreuz und flüstert "weiche!"....

Re: String ( Zahl) Formatieren

Verfasst: 01.03.2010 18:10
von elko68
:o ...wie mann eine Zeile funktionierenden (vieleicht auch nicht optimalen) Code so erweitern kann ist ja schon erstaunlich :mrgreen:

Re: String ( Zahl) Formatieren

Verfasst: 01.03.2010 18:51
von Josh
elko68 hat geschrieben::o ...wie mann eine Zeile funktionierenden (vieleicht auch nicht optimalen) Code so erweitern kann ist ja schon erstaunlich :mrgreen:
lol, stimmt auch :D

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

Verfasst: 06.03.2010 13:26
von mk-soft
So mal auf die schnelle zusammenkopiert. Windows Only

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

FF :wink: