Avatar billede casa2008 Nybegynder
10. juli 2008 - 10:16 Der er 17 kommentarer og
2 løsninger

Array problemer i visual basic

Mit problem er

har 2 textbox som bliver fyldt med noget data 

hvis servernavn i textbox1 eksisterer i textbox 2
skal linie fra textbox1 kopires over til textbox3

'GET DATA

TextBox1.Text =
"p44400A0001022;11.214.200.128;0017A4416D23:" & vbNewLine & "p4440fA0001024;11.214.200.128;0017A4416BD5:" & vbNewLine & "server23;11.214.200.128;0017A4416D29:"

TextBox2.Text =
"p44400A0001022" & vbNewLine & "p4440fA0001023"& vbNewLine & "server23"

Er der nogen der har en god ide til hvordan man gør dette

har prøvet at lave det om til array og det virker
( men sidder fast i hvordan man compare / sorterer )

' OMFORM TIL ARRAY

Dim strStringArray() As String = TextBox1.Text.Split(":"c)
Dim strStringArray1() As String = TextBox2.Text.Split(" "c)

kode er i (Visual Basic)
Avatar billede jih Nybegynder
10. juli 2008 - 10:40 #1
Jeg ville nok lave noget i stil med dette:

---
Dim intI as Integer
Dim blnTest as Boolean
blnTest = False ' ikke ens som default

For intI = 1 to Len(strStringArray())
  If (strStringArray1() = Mid(strStringArray(), intI, Len(strStringArray1()))) Then
    blnTest = True ' er ens
  End If
Next intI

' CHECK OM DE ER ENS
If (blnTest) Then ' Hvis de er ens
  ' Udfør handling
Else ' Hvis de ikke er ens
  ' Udfør handling
End if
---

dog jeg har ikke VB her på kontoret, så jeg kan ikke teste det, så håber det virker? :-)
Avatar billede casa2008 Nybegynder
10. juli 2008 - 11:03 #2
har lagt koden .... fik denne fejl 4 gange

Error    1    Number of indices is less than the number of dimensions of the indexed array.

blå streg under () ved strStringArray() og strStringArray1()
Avatar billede jih Nybegynder
10. juli 2008 - 11:15 #3
må ærligt indrømme at jeg plejer ikke at bruge arrays, bruger kun hele strenge.. hvis dette ikke virker, skal jeg prøve at lave et checkup sådan hvor du ikke bruger arrays:

Dim intI, intJ as Integer
Dim blnTest as Boolean
blnTest = False ' ikke ens som default

For intI = 1 To Len(strStringArray1())
  For IntJ = 1 To Len(strStringArray1(intI))
    If (strStringArray1(intI) = Mid(strStringArray(intI), intJ, Len(strStringArray1(intI)))) Then
      blnTest = True ' er ens
    End If
  Next intJ
Next intI

' CHECK OM DE ER ENS
If (blnTest) Then ' Hvis de er ens
  ' Udfør handling
Else ' Hvis de ikke er ens
  ' Udfør handling
End if
Avatar billede jih Nybegynder
10. juli 2008 - 11:25 #4
ellers er der dette - med ingen arrays:

Dim intI, intJ, intK as Integer
Dim blnTest as Boolean
blnTest = False ' ikke ens som default

For intI = 1 to Len(TextBox2.Text)
  If (Mid(TextBox2.Text, intI, 1) = " ") Then
    intK = intI
    If (Mid(TextBox2.Text, 1, (intI - 1)) = Mid(TextBox1.Text, 1, (intI - 1))) Then
      blnTest = True ' er ens
    End If
  End If
Next intI

For intJ = intK To Len(TextBox2.Text)
  If (Mid(TextBox2.Text, intI, 1) = " ") Then
    If (Mid(TextBox2.Text, (intK + 1), (intJ - intK)) = Mid(TextBox1.Text, 1, (intJ - intK))) Then
      blnTest = True ' er ens
    End If
  End If
Next intJ

' CHECK OM DE ER ENS
If (blnTest) Then ' Hvis de er ens
  ' Udfør handling
Else ' Hvis de ikke er ens
  ' Udfør handling
End if


hvis det så heller ikke virker, må jeg bare kigge på det når jeg kommer hjem - hvis altså ingen har hjulpet dig med det før det.. :-)
Avatar billede casa2008 Nybegynder
10. juli 2008 - 11:28 #5
Denne linie For stadigvæk fejl


intI = 1 To Len(strStringArray1())

Error    1    Number of indices is less than the number of dimensions of the indexed array.

blå streng under ()
Avatar billede jih Nybegynder
10. juli 2008 - 11:50 #6
virker det så når du bruger textbox checken istedet for array check? for hvis ikke, tror jeg ikke jeg kan hjælpe dig mere lige nu i øjeblikket.. bliver nok nødt til at komme hjem til min egen computer med VB..

jeg forstår mig åbenbart ikke helt på arrays og hvordan du laver for loops med dem, fordi jeg kunne kun forestille mig at den linje ville virke.. der mangler en index, hvis du har forstand på at fikse det ;-)

problemet er bare at jeg ikke kan sætte en index på når jeg skal tjekke hele strengen.. jeg kigger på det efter arbejde, ellers håber jeg bare på at det seneste jeg skrev, virker.. - messy, men muligt.. :-)
Avatar billede casa2008 Nybegynder
10. juli 2008 - 12:07 #7
Det sidste virker med text box

(men virker som at den laver en compare på alle linier og ikke en enkelt af gangen ...)

Men sagen er at den skal kigge på servernavn i textbox1 kører igennem textbox2 og hvis navn exsisterer kopires linie fra textbox1 til textbox3

derefter skal den gå videre til næste linie i textbox1 ( og kører samme procedure )

hvis servernavn  ikke exsisterer  i textbox2

skal den gå videre til næste linie i textbox1 ( og kører samme procedure )

er ligeglad om det er i text eller array tingene bliver gjordt....

Mange tak for hjælpen indtil videre ...
Avatar billede jih Nybegynder
10. juli 2008 - 12:09 #8
frokost pause - er tilbage om en times tid
Avatar billede jih Nybegynder
10. juli 2008 - 13:05 #9
den tjekker først alle chars i textbox2 efter mellemrum, og når den finder et, tager den alt før mellemrummet og sammenligner med den samme længde i starten af første textbox..

derefter tjekker den efter det næste mellerum, og når den finder et, tager den alt før mellemrummet (hen til det første mellemrum) - bemærk: dette ville være problematisk hvis der ville være flere end 2 mellemrum (mere end 3 strenge)..

der er nogle problemer med denne kode, som jeg kan løse med lidt tid (hvis jeg var hjemme ville jeg have mulighed for at bruge arrays, som ville lette meget på problemet).. men jeg må lige vide hvor dynamisk disse textbokse er.. kan der være mulighed for at der kommer mere end 3 forekomster i textbox2? kan textboksene starte med andet end servernavne?

hvis jeg skal lave denne funktion helt perfekt, bliver jeg sikkert nødt til at finde ud af alt helt præcist hvad du skal bruge det til (eller forklaring om hvordan textboksene vil blive formateret - om det altid er det samme, om det kan se anderledes ud, osv.)


du kan også lave det sådan som du siger at du tager servernavnet fra textbox1, men det ville være en del sværere, da du så skulle tage kun en del af hver linje, hvorimod hvis du tjekker fra textbox2, har du en hel linje, du skal sammenligne med den anden..

konklusion (siden jeg har en tendens til at snakke sort):
hvis dine textbokse kan blive mere dynamiske, vil jeg gerne hjælpe mere når jeg kommer hjem engang i aften. Men jeg får ikke hjulpet dig så meget mere, mens jeg er på arbejde.
Avatar billede casa2008 Nybegynder
10. juli 2008 - 13:29 #10
Hej

alt der går ind i textbox1 vil altid være

servernavn;ipadresse:macadresse

F.eksl
F22200A0001001;10.214.200.128;0017A4416D21:
faoutserver;10.214.200.128;0017A4411D23:
f22filserver;10.214.200.128;0017A4413D21:


alt der går ind i textbox2 vil altid være

Servernavn

F.eksl
F22200A0001001
f03666B0000003
f22filserver
faoutserver
F22200A0001001

Tænkte på om man kunne slå dem sammen i textbox3 og trække dubletter ud.
( bare en tanke )

Er utrolig taknemmelig at du gider bruge tid på dette problem har selv brugt 2 arbejds dage : )

mail endelig hvis det ikke er info nok ... eller jeg skal sende dig en vb fil
Avatar billede casa2008 Nybegynder
10. juli 2008 - 13:35 #11
Eller

version 2

Tænkte på om man kunne slå dem sammen i textbox3 og trække dubletter ud.
som array

TextBox3.Text = TextBox1.Text & vbNewLine & TextBox2.Text
Dim strStringArray2() As String = TextBox3.Text.Split(":"c)

(how to nappe dubletter ??? )
Avatar billede jih Nybegynder
10. juli 2008 - 13:46 #12
dvs. at istedet for følgende du skrev i spørgsmålet (øverst oppe):
"hvis servernavn i textbox1 eksisterer i textbox 2
skal linie fra textbox1 kopires over til textbox3 "

skal være
"hvis servernavn i textbox1 _ikke_ eksisterer i textbox 2
skal linie fra textbox1 kopires over til textbox3 "

?

du kan sende mig mail på webpsycho at gmail dot com, men jeg kan ikke læse vb filerne før jeg kommer hjem..

og hvis du vil splitte arrays, ville det være nemmere at splitte dem 2 gange - en gang ved ":" for at adskille linjerne, og så igen ved ";" for at adskille servernavn/ip/mac.. på den måde kan du sammenligne arr[0][0], arr[1][0], arr[2][0] osv.. (sikkert ikke opsat på den måde i vb)
jeg ved ikke meget om arrays i vb, men jeg kender om princippet, da jeg bruger dem i andre programmeringssprog.. ved bare ikke helt hvordan du vil tjekke op på dem, siden det ser ud til at man altid på indeksere dem (selv i for loops)..

hvis du vil have det løst uden arrays, kan jeg helt sikkert hjælpe dig, selv om det kan komme til at se lidt rodet ud, men tvivlsomt at jeg kan det mens jeg er på arbejde - da jeg ikke har adgang til helt så mange midler.. ;-)
Avatar billede casa2008 Nybegynder
10. juli 2008 - 13:56 #13
re :

dvs. at istedet for følgende du skrev i spørgsmålet (øverst oppe):
"hvis servernavn i textbox1 eksisterer i textbox 2
skal linie fra textbox1 kopires over til textbox3 "
(Yes til overstående )


skal være
"hvis servernavn i textbox1 _ikke_ eksisterer i textbox 2
skal linie fra textbox1 kopires over til textbox3 "

(overstående ikke korekt)

- hvis ikke exsisterer i begge / eller en af dem = nothing )


Det er faktisk lige meget om man checker textbox1 mod texkbox2 eller omvendt
hvis navnet er representeret i begge = textbox1 line kopires over til textbox 3
Avatar billede jih Nybegynder
10. juli 2008 - 14:03 #14
ja ok, misforstod "trække dubletter ud" .. troede du mente at du ikke ville have dem med.. :-)

ok.. men siden jeg ikke kan hjælpe dig med at fikse noget sammen mens jeg er på arbejde - siden jeg ikke har nok kendtskab til arrays - bliver jeg nødt til at kigge på det, når jeg kommer hjem.. hvis du bare sender mig en email med al den information du kan sende, så ser jeg på det.. så får du et svar i løbet af aftenen.. :-)
Avatar billede casa2008 Nybegynder
10. juli 2008 - 14:46 #15
Lyder godt ... fil er afsendt
Avatar billede kjulius Novice
12. juli 2008 - 11:20 #16
For nu at give mit lille bidrag, så har jeg lavet et lille forslag i Access VBA (selv om det ser ud som om, du arbejder i VB.NET, så det vil nok kræve lidt omskrivning):

Private Sub Form_Open(Cancel As Integer)
    Textbox1 = "p44400A0001022;11.214.200.128;0017A4416D23:" & vbNewLine & "p4440fA0001024;11.214.200.128;0017A4416BD5:" & vbNewLine & "server23;11.214.200.128;0017A4416D29:"

    Textbox2 = "p44400A0001022" & vbNewLine & "p4440fA0001023" & vbNewLine & "server23"
End Sub

Private Sub cmdTestCopy_Click()
    Dim Lin1() As String
    Dim Lin2() As String
    Dim Ord1() As String
    Dim i1 As Integer
    Dim i2 As Integer
   
    Me.Textbox3 = ""
   
    Lin1 = Split(Me.Textbox1, vbNewLine)
    Lin2 = Split(Me.Textbox2, vbNewLine)
    For i1 = 0 To UBound(Lin1)
        Ord1 = Split(Lin1(i1), ";")
        For i2 = 0 To UBound(Lin2)
            If Ord1(0) = Lin2(i2) Then
                If Me.Textbox3 <> "" Then
                    Me.Textbox3 = Me.Textbox3 & vbNewLine
                End If
                Me.Textbox3 = Me.Textbox3 & Lin1(i1)
                Exit For
            End If
        Next
    Next

End Sub
Avatar billede casa2008 Nybegynder
14. juli 2008 - 10:37 #17
Har rette minimal i koden og den virker ...

Dim Lin1() As String
        Dim Lin2() As String
        Dim Ord1() As String
        Dim i1 As Integer
        Dim i2 As Integer

        TextBox3.Text = ""

        Lin1 = Split(TextBox1.Text, vbNewLine)
        Lin2 = Split(TextBox2.Text, vbNewLine)
        For i1 = 0 To UBound(Lin1)
            Ord1 = Split(Lin1(i1), ";")
            For i2 = 0 To UBound(Lin2)
                If Ord1(0) = Lin2(i2) Then
                    If TextBox3.Text <> "" Then
                        TextBox3.Text = TextBox3.Text & vbNewLine
                    End If
                    TextBox3.Text = TextBox3.Text & Lin1(i1)
                    Exit For
                End If
            Next
        Next

Tusind tak for hjælpen ... så kan jeg komme videre med mit projekt ....
Avatar billede casa2008 Nybegynder
14. juli 2008 - 10:46 #18
alt respekt til kjulius for denne kanon kode : )

har fået min point ??
Avatar billede kjulius Novice
14. juli 2008 - 18:34 #19
Nej, for jeg har ikke lagt et svar endnu. Det gør jeg nu... :-)
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