Jaffe Skrevet 14. mars 2005 Del Skrevet 14. mars 2005 (endret) Jeg driver nå å lager et program som kommuniserer med Siemens-telefoner via serieporten. Dette gjør jeg ved å sende AT-kommandoer. Dette gjør jeg for tiden slik (veldig dårlig metode): For w = 1 To 10000: Next w MSComm1.Output = "AT+CGSN" + Chr(13) Do s$ = MSComm1.Input DoEvents Loop Until s$ <> "" MsgBox s$ Jeg får kontakt, og "AT+CGSN" er AT-kommandoen som ber telefonen om IMEI-nummer. Men svaret kommer med mellomrom, slik at i en tekstboks, blir svaret slik: "|354492003174944 ||||OK". |-tegnet er et annet. Men med en meldingsboks (msgbox) blir svaret slik: "354492003174944 OK" Og jeg vil ha det i en tekstboks, og slik at bare nummeret, og ikke "OK" og "||||" vises! Hvordan kan jeg sortere nummeret ut av variabelen? Endret 14. mars 2005 av Johan123321 Lenke til kommentar
Jonas Skrevet 14. mars 2005 Del Skrevet 14. mars 2005 IsNumeric()-funksjonen returnerer True hvis et tegn er et tall. Da looper vi hele teksten og henter ut hvert tegn med Mid(). Dim Tekst As String Tekst = "354492003174944" & vbNewLine & _ vbNewLine & _ "OK" Dim i For i = 1 To Len(Tekst) If IsNumeric(Mid(Tekst, i, 1)) = True Then Text1.Text = Text1.Text & Mid(Tekst, i, 1) Next i Lenke til kommentar
Jaffe Skrevet 14. mars 2005 Forfatter Del Skrevet 14. mars 2005 Det går ikke, siden IMEI-nummeret varierer fra telefon til telefon! Alle telefoner har forskjellig IMEI-nummer! Det jeg vil at programmet skal gjøre, er å sortere ut hva som helst fra strengen som inneholder data som er hentet fra telefonen. Det må kunne være tekst også. Det den skal, er å sortere vekk "OK" og alle de "|" lignende tegnene. "|" betyr tydeligvis ny linje, for i en msgbox ble det mellomrom mellom "OK" og IMEI-nummeret, mens i tekstboksen ble det slik jeg viste. Altså: sortere ut det mellom "|TEKSTEN||||OK||". Bare "TEKSTEN" skal være igjen. Teksten skal kunne være alt mulig (tall, tekst osv.) Lenke til kommentar
Jonas Skrevet 14. mars 2005 Del Skrevet 14. mars 2005 Replace()-funksjonen funker vel da. Den søker etter tekst og bytter med noe annet. Dim Tekst As String Tekst = "354492003174944" & vbNewLine & _ vbNewLine & _ "OK" & vbNewLine & _ "||||||||" Tekst = Replace(Tekst, "|", "") Tekst = Replace(Tekst, "OK", "") Tekst = Replace(Tekst, vbNewLine, "") Text1.Text = Tekst Lenke til kommentar
Jaffe Skrevet 14. mars 2005 Forfatter Del Skrevet 14. mars 2005 (endret) Det fungerer ikke helt. Variabelen Tekst må hente dataene fra variabelen s$ i så fall, men tegnet "|" er egentlig ikke "|" men et tegn som betyr ny linje :S Endret 14. mars 2005 av Johan123321 Lenke til kommentar
aadnk Skrevet 14. mars 2005 Del Skrevet 14. mars 2005 Kanskje kan Split-funksjonen benyttes i dette tilfellet? Da får man med all data, slik at man eventuelt kan sjekke statuskoden som jo OK i denne situasjonen er: Dim aLines As Variant, sText As String sText = "354492003174944" & vbNewLine & vbNewLine & "OK" aLines = Split(sText, vbNewLine) ' Dersom strengen i virkeligheten har en vbNewLine-karakter i begynnelsen, må du lese ifra element nummer èn. txtRet.Text = aLines(0) Lenke til kommentar
Jonas Skrevet 14. mars 2005 Del Skrevet 14. mars 2005 Slik finner du aschii-tallet (unicode?) til tegnene. Dim i For i = 1 To Len(s$) MsgBox Asc(Mid(s$, i, 1)) Next i Når du har funnet tallet, replacer du bare med Chr(Tall) Lenke til kommentar
Jaffe Skrevet 14. mars 2005 Forfatter Del Skrevet 14. mars 2005 (endret) Vel, enten er det jeg som ikke har skjønt noe her, eller så er det dere... Programmet sender kommandoen "AT+CGSN" til telefonen. Denne kommandoen forteller telefonen at den skal sende tilbake IMEI-nummer. I tillegg til IMEI-nummeret, sender telefonen dessverre også med noen tegn som tydeligvis betyr ny linje, og "OK". Noen før og noen etter nummeret jeg vil ha tak i. Det jeg vil, er å sortere ut IMEI-nummeret fra strengen som er hentet fra telefonen. Dette nummeret varierer fra telefon til telefon, og variabelen Tekst kan derfor ikke være forhåndsinstillt på ett nummer, siden programmet skal kunne brukes på andre telefoner med annet nummer også. Sorteringen Jonas kom med fungerte halvveis, den fikk vekk "OK", men disse tegnene er fortsatt der, de som forteller at det skal være ny linje, men som i tekstboksen blir et "|" lignende tegn, sikkert fordi den ikke er multiline. Hadde den vert multiline, ville det blitt en linje FØR nummeret og mange etter. Jeg vil at IMEI-nummeret skal vises alene i boksen som altså IKKE skal være på flere enn en linje. Endret 14. mars 2005 av Johan123321 Lenke til kommentar
aadnk Skrevet 14. mars 2005 Del Skrevet 14. mars 2005 I så fall tror jeg min metode vil fungere, dersom du leser fra element nummer èn: txtRet.Text = aLines(1) Skulle den mot formodning ikke fungere, hadde det vært greit med en tilbakemelding om hva som gikk galt. Lenke til kommentar
Jonas Skrevet 14. mars 2005 Del Skrevet 14. mars 2005 De strekene er bare tegn som vanlig TextBox setter inn fordi tegnet ditt er ukjent. Kjør programmet ditt, KOPIER teksten og LIM INN her, så kan jeg finne ut hva de tegnene dine er Lenke til kommentar
Jaffe Skrevet 14. mars 2005 Forfatter Del Skrevet 14. mars 2005 De strekene er bare tegn som vanlig TextBox setter inn fordi tegnet ditt er ukjent. Kjør programmet ditt, KOPIER teksten og LIM INN her, så kan jeg finne ut hva de tegnene dine er Jeg fikk det til nå! Takket være den supre metoden din; nemlig å gå igjennom alle tegnene og finne ASCII-verdien! Jeg prøvde å lime inn her i forumet, men det ble bare en ny linje, siden det er det dette tegnet tydeligvis betyr... Nå har jeg hvertfall klart å lage et program som finner IMEI-nummeret til en Siemens-telefon via datakabel! (Skal legge til flere funksjoner altså ) Lenke til kommentar
Jonas Skrevet 14. mars 2005 Del Skrevet 14. mars 2005 (endret) Jeg regner med du fant 13? Ja, for det ER ny-linje-tegn! Hvis Multiline er False, vil alle ny-linje-tegn vises som en tykk strek! Edit: Merkelig at Replace() ikke funka da.. Endret 14. mars 2005 av Jonas Lenke til kommentar
trrunde Skrevet 14. mars 2005 Del Skrevet 14. mars 2005 Kan vel bruke val får å få bare tallene ut fra en streng Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå