Ga naar inhoud
  • 0

nummer formaten bij importeren


djcomidi

Vraag

Geplaatst:

Een klant waarvoor we een applicatie maken is gevestigd in Nederland/België en Zuid-Afrika.

Zoals jullie weten hebben deze landen een verschillend formaat van nummers. ( 1.000,23 vs 1,000.23 )

Externe software genereert een xml die we moeten kunnen importeren.

In Nederland/België ziet zo een minimale xml er als volgt uit:

25,13

12.46

In Zuid-Afrika ziet er een zelfde xml uit als volgt:

25.13

12.46

Zowel data1 als data2 zijn decimale-getallen en hebben nooit een waarde groter dan 100.

data1 heeft het nummer-formaat van het land, data2 heeft altijd een decimale punt als komma.

Het importeren is niet het probleem, wel dat data1 of data2 als tekst aanzien wordt.

Is er een manier waarop ik er voor kan zorgen dat zowel data1 als data2 uiteindelijk in filemaker als nummer worden opgeslagen ?

 

Alvast bedankt voor de reacties

(wat een lange eerse post...)

7 antwoorden op deze vraag

Aanbevolen berichten

  • 0
Geplaatst:

@Felix

Ik gebruik inderdaad een xslt om de data in FM te krijgen.

Daarin hebben zowel data1 als data2 TYPE="NUMBER".

In FM zijn veldData1 en veldData2 ook nummers.

 

Nu wil ik deze nummers weergeven op een layout, afgerond op bvb 1 cijfer na de komma.

Bij data1 lukt dit via de veld-eigenschappen. (want data1 in de xml heeft het lokale decimaal teken, dus FM aanziet dit als nummer)

Bij data2 lukt dit niet. (want data2 in de xml gebruikt enkel het decimale punt en wordt (in mijn geval) dus aanzien als tekst)

 

Ik was al aan het denken om na het importeren een Substitute/Vervang te doen,

( om de leesbaarheid te verhogen gebruik ik [punt] en [komma] in plaats van de tekens zelf )

AlsNummer ( Vervang ( AlsTekst ( data2 ); "[punt]"; "[komma]" ) )

Maar dit geeft dan problemen in Zuid-Afrika, want daar is een komma niet het decimale teken.

 

Uiteraard had ik graag dat data2 ook kan opgeslagen worden als een FM-nummer (ongeacht het land waarin de import gebeurd)

Iemand suggesties ?

 

( ik gebruik de engelse versie van filemaker, dus ik weet niet precies hoe de overeenkomstige nederlandse functies heten )

  • 0
Geplaatst:

Ik zou het in je xslt oplossen:

Je geeft aan dat de getallen nooit groter zijn dan 100 en dat je de gegevens importeert in velden in filemaker met het gewenste formaat, dwz nummers komen in nummervelden terecht.

 

Met die voorwaarden in het achterhoofd kan je alle nummers door een simpel filtertje in xslt halen:

translate(getal,'0123456789,.','0123456789,,') voor import in nederlands formaat en

translate(getal,'0123456789,.','0123456789..') voor import in zuid-afrikaans formaat filemakerbestanden.

 

Dan kan er in je xslt uitzien als:

Het is denk ik wel handiger om de strings als '0123456789,,' in variabelen te zetten, zodat het verschil tussen je nederlandse en zuidafrikaanse stylesheet slechts de inhoud van die ene variabele is.

  • 0
Geplaatst:

@menno

Bedankt voor je suggestie.

Ik heb helaas niet zoveel kennis van xslt, dus ik hou het liever bij een FileMaker oplossing.

 

@Felix

Die functie is inderdaad iets waar ik naar op zoek was.

Er staat altijd een decimale punt in die data, nooit een duizend-teken, het aantal cijfers na de komma is variabel.

Ik heb van jouw versie dus dit gemaakt:

If ( GetAsNumber ( data & "0" ) > data; GetAsNumber ( Substitute ( data; "."; "," ) ); data )

Als data = 23.45

In RSA: 23.450 = 23.45 => 23.45

In BE/NL: (de punt wordt bij mij genegeerd) 23450 > 2345 => 23,45

 

Nu kan ik op de layout wel afronden

en hoef ik minder aanpassingen te doen om de data in een grafiek te krijgen.

Van harte bedankt!

  • 0
Geplaatst:

Een kleine update.

 

Aangezien het om meer dan 1 veld gaat, heb ik het volgende gedaan:

Import [...]
If [ GetAsNumber ( "12.340" ) > GetAsNumber ( "12.34" ) ]
   # als we hier terecht komen, dan zijn we in een land dat een decimale komma gebruikt
   Set Field [ data1; Value:GetAsNumber ( Substitute ( data1; "."; "," ) ) ]
   ...
   Set Field [ dataN; Value:GetAsNumber ( Substitute ( dataN; "."; "," ) ) ]
End If

  • 0
Geplaatst:

Ja, daar dacht ik ook aan. Volgende test is gelijkwaardig:

If [GetAsNumber("12.43") = GetAsNumber("1243")]
 // We zijn in de Benelux!
Else
 // Wij zijn in Zuid-Afrika. Of de VS! Of gewoon op alle plaatsen waar ze een punt ipv een komma als decimaal scheidingsteken gebruiken!
End If

Doe mee aan dit gesprek

Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.

Gast
Beantwoord deze vraag...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...