Gå til innhold

Sortere ut tekst fra strenger


Anbefalte innlegg

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 av Johan123321
Lenke til kommentar
Videoannonse
Annonse

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

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

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

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

Vel, enten er det jeg som ikke har skjønt noe her, eller så er det dere... :blush:

 

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.

post-32-1110813859_thumb.jpg

Endret av Johan123321
Lenke til kommentar
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å! :D

Takket være den supre metoden din; nemlig å gå igjennom alle tegnene og finne ASCII-verdien! :w00t:

 

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...