Avatar billede simon_jacobsen Nybegynder
20. oktober 2001 - 16:30 Der er 17 kommentarer og
1 løsning

fra textbox til array ???

hvordan gør man hvis man har en tekst i en textbox og man gerne vil have hver eneste linie smidt over i et array, array\'d hedder:
dim linie(100)

på forhånd tak :)
Avatar billede cellaneous Nybegynder
20. oktober 2001 - 18:22 #1
Hvis du kigger på http://www.eksperten.dk/spm/112632 er der et eksempel hvor jeg åbner en fil, tjekker hvor mange linjer der er i filen (hvor der er chr$(10) og chr$(13) altså) og for hver gang jeg har fundet et linjeskift laver jeg en msgbox som angiver hvilket nummer linjen har, og hvilket indhold der hører til den linje.

Du har brug for en let modificeret version af denne kode.

Læs fra textbox istedet for fil, og [MsgBox Text1.text, 0, \"linie nummer \" & antal] skal laves om til noget i stil med [linie(antal) = text1.text] (hvor text1.text så vil være en variabel istedetfor, da du jo netop henter fra en textfil).
Kig på koden, og se om du selv kan finde ud af resten, ellers må du bare sige til :-)

Private Sub Command3_Click()

Dim x As String * 1
Dim filnavn As String
Dim intFreeFile As Integer
Dim antal As Integer

CommonDialog1.ShowOpen
filnavn = CommonDialog1.filename
If filnavn = \"\" Then Exit Sub
intFreeFile = FreeFile

Open filnavn For Binary Access Read As #intFreeFile
    For i = 0 To LOF(1)
        Get #intFreeFile, i + 1, x
        If x = Chr$(10) Then
            \'gør ingenting - linjeskift på vej
        ElseIf x = Chr$(13) Then
            \'linjeskift er her
            MsgBox Text1.text, 0, \"linie nummer \" & antal
            antal = antal + 1
            \'tøm tekstboksen så vi kan skrive på ny linie
            Text1.text = \"\"
        Else
            \'skriv videre på samme linie
            Text1.text = Text1.text & x
        End If
    Next i
Close #intFreeFile

End Sub
Avatar billede bennytordrup Nybegynder
20. oktober 2001 - 19:45 #2
Hvis du bruger VB6, kan du erklære dit array således

dim Linie() as string

og derefter få textbox\'ens indhold deroveri ved hjælp af Split:

Linie=split(text1.text, vbCrLf)
Avatar billede bennytordrup Nybegynder
20. oktober 2001 - 19:46 #3
Det kræver dog lige, at du vil have splittet op på linieskift
Avatar billede simon_jacobsen Nybegynder
20. oktober 2001 - 19:56 #4
kan man gøre sådan at :
linie(1) = indhold af linie1 i textbox
linie(2) = indhold af linie2 i textbox
osv ...
og
hvordan bruger man kommandoen \"split\" ?

Simon
Avatar billede bennytordrup Nybegynder
21. oktober 2001 - 00:18 #5
Syntaxen for Split er:

Split(expression[, delimiter[, count[, compare]]])

Expression er det, du vil have delt op i bidder (indholdet af textbox).
Delimiter er de(t) tegn, du vil bruge som opdelingstegn (linieskift - vbCrLf)
Count er det antal, du vil have opdelt i (-1 betyder ingen grænse)
Compare er enten vbBinaryCompare, vbTextCompare eller vbDatabaseCompare.

Returværdien er et nul-baseret array af strings.

Jeg plejer at bruge den i den simple form:

Linie = Split(Text1.Text, vbCrLf, -1)
Avatar billede simon_jacobsen Nybegynder
21. oktober 2001 - 10:13 #6
nu mangler jeg bare at få koden sådan at arrayed :
linie(1) = linie1
linie(2) = linie2
osv...
så er pointene hjemme :)
Avatar billede bernhof Nybegynder
21. oktober 2001 - 17:53 #7
Dim linie()
linie = Split(Text1.Text, vbCrLf, 100)

Hvis grænsen for linier altså er 100, ellers gør brug af simon_jacobsens eksempel!

/Mikbj
Avatar billede bernhof Nybegynder
21. oktober 2001 - 17:54 #8
undskyld! benny.tordrup\'s eksempel s\'føli! :)
Avatar billede bennytordrup Nybegynder
21. oktober 2001 - 22:35 #9
Du kan ikke få arrayet til at blive 1-baseret. Desværre.

Hvis du partout vil have det 1-baseret, kan du lave lidt memory-fifleri med CopyMemory over i et 1-baseret array:

Public Declare Sub CopyMemory Lib \"kernel32\" Alias \"RtlMoveMemory\" (Destination As Any, Source As Any, ByVal Length As Long)

Dim DumArray() as string
dim Array1Base() as string

DumArray=Split(Text1.Text, vbCrLf, -1)

ReDim Array1Base(1 to ubound(DumArray)+1)
CopyMemory Array1Base(1), DumArray(0), (UBound(DumArray)+1)*Len(Long)

Det kan lade sig gøre, da en streng i VB reelt kun er en pointer til en streng. Len(Long) skal angives til størrelsen af en long-variabel. AFAIR er den 4.

NB. Hvis du får lavet noget galt i det her, vil du højst sandsynligt crashe VB
Avatar billede bennytordrup Nybegynder
24. oktober 2001 - 22:42 #10
Fik du løst dit problem?
Avatar billede simon_jacobsen Nybegynder
25. oktober 2001 - 09:49 #11
nej, jeg vil gerne have svaret lidt mere præcis :)
jeg kan ikke forstå at det her skulle være det rigtige svar(jeg kan nemlig ikke teste det før weekenden) :)
Dim linie(100)
linie = Split(Text1.Text, vbCrLf, 100)
kan det godt passe ?
Avatar billede bennytordrup Nybegynder
25. oktober 2001 - 09:53 #12
Nej. Du skal ikke angive antal linier i din dim - det sørger Split selv for. Men ellers er det rigtigt.
Avatar billede simon_jacobsen Nybegynder
25. oktober 2001 - 12:16 #13
ok
så den finder selv ud af antallet af linier *smart*
så takker jeg :)
Avatar billede simon_jacobsen Nybegynder
25. oktober 2001 - 12:20 #14
forresten hvad mener du med denne bemærkning :
\'NB. Hvis du får lavet noget galt i det her, vil du højst sandsynligt crashe VB
Avatar billede bennytordrup Nybegynder
25. oktober 2001 - 12:28 #15
Fordi du med copymemory ligger og flytter rundt på hukommelse. Det går galt, hvis du kommer uden for de hukommelsesområder, som variablerne ligger i.
Avatar billede simon_jacobsen Nybegynder
25. oktober 2001 - 17:26 #16
hvad kan man f.eks. gøre forkert ?
Avatar billede cellaneous Nybegynder
26. oktober 2001 - 18:34 #17
Jeg tror noget nær alt kan gå galt med api kald :-) derfor de ikke er så smarte til nybegyndere
- sørg for at gemme dit projekt hver gang du har ændret noget i vb, før du vælger at prøvekøre/teste programmet
Avatar billede simon_jacobsen Nybegynder
27. oktober 2001 - 14:04 #18
ok... godt svar :)
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