visual basic 6 strängformatering

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
mastodonten
Inlägg: 4
Blev medlem: 12 februari 2023, 11:14:05

visual basic 6 strängformatering

Inlägg av mastodonten »

hej!
jag har gjort ett projekt med en Arduino som är försedd med en ultraljudsensor samt en RF-modul 433 Mhz.
sensorn mäter nivån i en septiktank och sänder iväg data trådlöst till en mottagardel inne.
Mottagardelen är även det en Ardino med mottagar RF-modul.
Arduinon är kopplad till min pc via usb (serie) och på pcn har jag ett VB6 program som jag gjort som visar datat visuellt.
jag har kört detta program med två givare tidigare som mäter temperatur och lufttryck bode inne och ute, allt har funkat bra med dessa två.

Nu till problemet med "nya" sensorn. Den mäter avståndet genom att "pinga" iväg en puls som stutsar tillbaka och så mäts tiden och blir till avstånd.
datat lagras i en sträng (string) i rf-modulen och jag behöver formatera strängen så att datat kan omvandlas till en Int eller double variabel för att kunna hantera datat matematiskt.
Min stäng skiftar mellan att ge maxavstånd som är 401 Cm och då innehåller strängen = 401 alltså 3 siffror.
när avståndet minskar så får jag tex 43.21 cm alltså ett decimaltal och minskar jag ännu mer till mindre än 10cm så får jag tex 2.85 cm .

detta gör att jag inte kan ta emot datat och göra om det med funktionen Val ( sträng) .
Kan någon vänlig själ hjälpa mig med hur man formaterar strängen så att den bara visar heltal från 1 cm till 140 cm och tar bort eller avrundar på nåt sätt.
Användarvisningsbild
Icecap
Inlägg: 26108
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: visual basic 6 strängformatering

Inlägg av Icecap »

Det finns lite olika sätt att göra på.

Funktionen int() ger ju text-till-heltal.
Samma funktion för flyttal finns också - men du är ju bara intresserat av heltal så om du gör en Djup = int(mätsträngen) ska du få heltal fram till punkt/komma.

Om funktionen just heter int() i VB är jag osäker på, jag kör med C till vardags.

Ett annat sätt är att skanna igenom strängen, tecken för tecken.
Start med att ge en variabel ("Result") värdet noll.
Ta första tecken (peka på...) och OM det är >= '0' OCH <= '9':
Result *= 10;
Result += (tecknet - '0')
Upprepa detta så länge det är siffror.
Användarvisningsbild
MadModder
Co Admin
Inlägg: 29907
Blev medlem: 6 september 2003, 13:32:07
Ort: MadLand (Enköping)
Kontakt:

Re: visual basic 6 strängformatering

Inlägg av MadModder »

val() ska funka med decimaler, om du inte har några andra tecken efter siffrorna, samt att variabeln är satt till real och inte int.
Och om du vill avrunda sen och inte bara klippa av decimalerna använder du round().

Annars för att klippa bort decimalerna innan i strängen kan du ju göra såhär tänker jag...

position = instr([sträng] & ".", ".")
resultat = left([sträng], position-1)

Kolla var punkten är. Finns ingen punkt från början hittar den punkten som lagts till efter med & ".".
Sen ta bara den del från vänster som är innan punkten.
mastodonten
Inlägg: 4
Blev medlem: 12 februari 2023, 11:14:05

Re: visual basic 6 strängformatering

Inlägg av mastodonten »

tack så mycket för svar :)
jag testar vidare.
Sado
Inlägg: 84
Blev medlem: 6 april 2007, 14:39:33
Ort: Svealand

Re: visual basic 6 strängformatering

Inlägg av Sado »

Val() vill ha lokalens decimaltecken vilket normalt på en svensk dator är komma ",". Vill du göra om en sträng med punkt så kan du köra Replace(sträng, ".", ",") eller motsvarande först.

Edit: Eller blandar jag ihop det med CVal() nu?
Användarvisningsbild
MadModder
Co Admin
Inlägg: 29907
Blev medlem: 6 september 2003, 13:32:07
Ort: MadLand (Enköping)
Kontakt:

Re: visual basic 6 strängformatering

Inlägg av MadModder »

Vad jag vet vill val bara ha en punkt oavsett vad man har för lokalt talformat. :humm:
Användarvisningsbild
rvl
Inlägg: 5721
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: visual basic 6 strängformatering

Inlägg av rvl »

Det hade jag förväntat mig av Basic också.

Däremot har jag stött på en rätt modern och kanske till och med populär Android app, där "tangentbordet" bara kunde generera det ena och inputfältet bara accepterade det andra ...tills jag ändrade telefoninställningarna till helengelska.
Skriv svar