Avatar billede _et Praktikant
27. april 2003 - 18:02 Der er 21 kommentarer og
1 løsning

string til array - hvordan

Hvorhan laver jeg en streng om til 8 enkelde variabler?

Det må være noget i denne stil:

Dim Str1 as String
Dim nr as Array

Str1 ="10011001"

....til....

nr(1) = 1
nr(2) = 0
nr(3) = 0
nr(4) = 1
nr(5) = 1
nr(6) = 0
nr(7) = 0
nr(8) = 1

Jeg skal nemlig bruge de 8 variabler til at styre et io kort
Avatar billede Slettet bruger
27. april 2003 - 18:10 #1
Noget a la

For i=1 to 8
  nr(i)=mid(str,i,1)
next i
Avatar billede Slettet bruger
27. april 2003 - 18:11 #2
Korrektion:

For i=1 to 8
  nr(i)=mid(Str1,i,1)
next i
Avatar billede mortrr Praktikant
27. april 2003 - 18:11 #3
Lidt uortodoks
nr=split(replace(replace(Str1,"0",",0"),"1",",1"),",")

Eller
for i=1 to 8
nr(i)=mid(Str,i,1)
next i

Hvis det skal være tal, så brug en konverteringsfunktion på de enkelte værdier.
for i=1 to 8
nr(i)=CByte(mid(Str,i,1))
next i
Avatar billede mortrr Praktikant
27. april 2003 - 18:12 #4
Øv - der er altid nogen der er hurtigere.
Avatar billede Slettet bruger
27. april 2003 - 18:15 #5
:-)
Avatar billede _et Praktikant
27. april 2003 - 18:43 #6
Hvad er der galt her?? Jeg får denne fejl:

Run-time 5
Invalid procedure call or argument

----------

Sub Index(TXT As String)
Dim nr() As Integer
For i = 0 To 7
nr(i) = Mid(TXT, i, 1)
Debug.Print (i)
Next
End Sub
Avatar billede Slettet bruger
27. april 2003 - 18:46 #7
Mener at arrays skal erklæres som strenge altså Dim nr() as string
Avatar billede Slettet bruger
27. april 2003 - 18:47 #8
Hmm, eller at en streng starter fra pos 1 og ikke 0 så du skal køre fra 1 til 8 og ikke 0 til 7.
Avatar billede _et Praktikant
27. april 2003 - 18:58 #9
det hjalp ikke
Avatar billede _et Praktikant
27. april 2003 - 19:02 #10
Jeg skal helt precis spørge:

for i=0 to 7
if (nr(i) = 1 ) then
SetIO
else
ClearIO
end if
next
Avatar billede Slettet bruger
27. april 2003 - 19:03 #11
Hvis den skal være helt sikker så:
Sub Index(TXT As String)
Dim nr() As stringFor i = 0 To 7
nr(i) = Mid(TXT, i, 1)
Debug.Print (i)
Next
End Sub
Avatar billede Slettet bruger
27. april 2003 - 19:05 #12
Prøver lige igen, den smuttede

Sub Index(TXT As String)
  Dim nr() As string
  If Len(TXT) = 8 Then   
    For i = 0 To 7
      nr(i) = Mid(TXT, i+1, 1)
      Debug.Print (i)
    Next
  End If
End Sub

Og så

for i=0 to 7
  if (CInt(nr(i)) = 1 ) then
    SetIO
  else
    ClearIO
  end if
next
Avatar billede Slettet bruger
27. april 2003 - 19:07 #13
Men så skal Dim nr() as string være erklæret globalt og ikke i proceduren Index for ellers vil du ikek kunne få fat i den.
Avatar billede _et Praktikant
27. april 2003 - 19:25 #14
Her var den.

Sub Index(TXT As String)
For i = 1 To 8
    Var = Mid(TXT, i, 1)
    If (Var = "1") Then Debug.Print (i)
Next
End Sub
Avatar billede _et Praktikant
27. april 2003 - 19:34 #15
Tak for hjælpen
Avatar billede Slettet bruger
27. april 2003 - 19:52 #16
Velbekomme
Avatar billede sjh Nybegynder
27. april 2003 - 21:57 #17
Hvis det skal laves hurtig så gør sådan:

'------------------------------------ Form1 ------------------------------------
Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)

Private Sub StrToByte(ByVal strData As String, ByRef arrByte() As Byte)
  If Len(strData) > 0 Then
    ReDim arrByte(Len(strData) - 1) As Byte
    Call CopyMemory(arrByte(0), ByVal strData, Len(strData))
  End If
End Sub

Public Sub myIO(ByVal strText As String)
Dim i        As Integer
Dim arrByte() As Byte
  Call StrToByte(strText, arrByte())
  For i = 0 To UBound(arrByte())
    Select Case arrByte(i)
      Case 48 '48 = 0
        'ClearIO <-----------
        Debug.Print (i) & " er 0"
      Case 49 '49 = 1
        'SetIO <-----------
        Debug.Print (i) & " er 1"
    End Select
  Next i
End Sub

Private Sub Form_Load()
Dim strText  As String
  strText = "10011001"
  Call myIO(strText)
End Sub
'------------------------------------ Form1 ------------------------------------
Avatar billede easyware Nybegynder
01. maj 2003 - 01:10 #18
Du kunne også prøve denne

for N = 1 to Len(Str1)
Nr(I) = val(mid(Str1,N,1))
next N
Avatar billede easyware Nybegynder
01. maj 2003 - 01:15 #19
Nr(N) = ... selvfølgelig

For N = 1 to Len(Str1)
  Nr(N) = Val(Mid(Str1,N,1))
Next N
Avatar billede Slettet bruger
01. maj 2003 - 11:17 #20
Jeg kunne godt tænke mig at vide om du har tænkt dig at dele ud af de point du har sat af til spørgsmålet?
Avatar billede _et Praktikant
18. maj 2003 - 15:53 #21
sorry til bertie, min mail har ikke virket, så jeg havde glemt spm.

Der er nogle fede løsninger, tak til alle for ders indslag
Avatar billede Slettet bruger
18. maj 2003 - 17:14 #22
Ok og tak for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester