|
| Arrays... Fra : Thomas Løcke |
Dato : 08-08-02 06:40 |
|
Hej NG..
Jeg sidder og roder lidt med både VB og PHP. I PHP kan man lave et array som
er "åbent", i den forstand at det selv udvider sig i takt med at der fyldes
data ind.
Kan man også det i VB?
Umiddelbart fortæller alle mine newbie bøger mig at arrays i VB altid skal
erklæres som f.eks. dim data(100) as xxxxx, hvor 100 så er det maksimale
antal poster der kan indføres i array'et.
Jeg oplever det som langt mere praktisk sådan som PHP gør det, og håber at
VB har en lignende metode.
Håber nogen kan hjælpe..
Mvh
Thomas L.
| |
Jens Vestergaard (08-08-2002)
| Kommentar Fra : Jens Vestergaard |
Dato : 08-08-02 06:50 |
|
"Thomas Løcke" <thomas@responsum.dk> skrev i en meddelelse
news:3d520425@news.wineasy.se...
> Hej NG..
>
> Jeg sidder og roder lidt med både VB og PHP. I PHP kan man lave et array
som
> er "åbent", i den forstand at det selv udvider sig i takt med at der
fyldes
> data ind.
>
> Kan man også det i VB?
Du kan bruge ReDim
Dim x As Long
Dim myArray() as String
For x = 1 To 100
ReDim myArray(x)
Next
Brug ReDim Preserve, hvis du vil bevare indholdet af de eksisterende
array-elementer.
--
mvh
Jens Vestergaard
www.railsoft.dk
--------
Indsæt v før snablen
| |
Thomas Løcke (08-08-2002)
| Kommentar Fra : Thomas Løcke |
Dato : 08-08-02 07:05 |
|
Hej Jens,
"Jens Vestergaard" <j@railsoft.dk> skrev i en meddelelse
news:3d520656$0$89534$edfadb0f@dspool01.news.tele.dk...
> Du kan bruge ReDim
>
> Dim x As Long
> Dim myArray() as String
>
> For x = 1 To 100
> ReDim myArray(x)
> Next
>
> Brug ReDim Preserve, hvis du vil bevare indholdet af de eksisterende
> array-elementer.
Ok, vil det sige, at hvis jeg har f.eks. en .txt fil, hvor indholdet svinger
lige fra 1 linie til xxx linier, og jeg har behov for linievis at indlæse
dette indhold til et array, så kan jeg gøre som følger:
dim taeller as long
dim linier() as string
dim fil as string
fil=sti til fil
taeller=0
open fil for input as #1
do while EOF(1)=false
taeller=taeller+1
redim linier(taeller)
line input #1, linier(taeller)
loop
close #1
Har jeg fattet det korrekt?
Mvh
Thomas L.
| |
Mads Chr. Olesen (08-08-2002)
| Kommentar Fra : Mads Chr. Olesen |
Dato : 08-08-02 07:11 |
|
det ser godt ud, bortset fra du nok skal bruge
redim preserve linier(taeller)
"Thomas Løcke" <thomas@responsum.dk> skrev i en meddelelse
news:3d520a14$1@news.wineasy.se...
> Hej Jens,
>
> "Jens Vestergaard" <j@railsoft.dk> skrev i en meddelelse
> news:3d520656$0$89534$edfadb0f@dspool01.news.tele.dk...
> > Du kan bruge ReDim
> >
> > Dim x As Long
> > Dim myArray() as String
> >
> > For x = 1 To 100
> > ReDim myArray(x)
> > Next
> >
> > Brug ReDim Preserve, hvis du vil bevare indholdet af de eksisterende
> > array-elementer.
>
> Ok, vil det sige, at hvis jeg har f.eks. en .txt fil, hvor indholdet
svinger
> lige fra 1 linie til xxx linier, og jeg har behov for linievis at indlæse
> dette indhold til et array, så kan jeg gøre som følger:
>
> dim taeller as long
> dim linier() as string
> dim fil as string
>
> fil=sti til fil
> taeller=0
>
> open fil for input as #1
> do while EOF(1)=false
> taeller=taeller+1
> redim linier(taeller)
> line input #1, linier(taeller)
> loop
> close #1
>
> Har jeg fattet det korrekt?
>
> Mvh
> Thomas L.
>
>
| |
Thomas Løcke (08-08-2002)
| Kommentar Fra : Thomas Løcke |
Dato : 08-08-02 07:13 |
|
Hej Mads,
Ahhh... Der sev den ind! Så koden skal altså være:
dim taeller as long
dim linier() as string
dim fil as string
fil=sti til fil
taeller=0
open fil for input as #1
do while EOF(1)=false
taeller=taeller+1
redim preserve linier(taeller)
line input #1, linier(taeller)
loop
close #1
Så kan jeg læse indholdet i filen, ligegyldigt hvor stor filen er?
SMART!
At tænke sig at jeg har siddet og fumlet med det så længe, når løsningen i
virkeligheden er så simpel.. Men ok, sådan er det vel at være newbie..
Mvh
Thomas L.
"Mads Chr. Olesen" <MadsChrO@Yahoo.com> skrev i en meddelelse
news:ait1tu$7e3$1@sunsite.dk...
> det ser godt ud, bortset fra du nok skal bruge
> redim preserve linier(taeller)
| |
Tomas Christiansen (08-08-2002)
| Kommentar Fra : Tomas Christiansen |
Dato : 08-08-02 23:14 |
|
Thomas Løcke skrev:
> do while EOF(1)=false
> taeller=taeller+1
> redim preserve linier(taeller)
> line input #1, linier(taeller)
> loop
....
> Så kan jeg læse indholdet i filen, ligegyldigt hvor stor filen er?
Tjaaa... Hvis du har tid og RAM nok.
Hvis ikke jeg tager meget fejl, gør VB det, ved ReDim Preserve, at
hele indholdet kopieres til et nyt sted i RAM, hvor der lige netop er
plads til ét element mere. Det kommer til at tage tid og bruge en hel
del plads, hvis filen er stor.
Du kan eventuelt starte med:
ReDim linier(1000)
og derefter foretage en check lige inden du indlæser og tildeler det
indlæste til tabellen, og kun udvide hvis der er behov for det:
If Taeller > UBound(linier) Then
ReDim Preserve linier(Ubound(linier)+100)
End If
Til sidst (når løkken er færdig) kan det være nødvendigt at justere
tabellens størrelse ned:
ReDim Preserve linier(Taeller)
Vælg selv de tal (1000,100) som passer dig bedst.
Bemærk iøvrigt at du kan bruge navnet Tæller i stedet for Taeller.
-------
Tomas
| |
Magne Namsvatn (11-08-2002)
| Kommentar Fra : Magne Namsvatn |
Dato : 11-08-02 08:59 |
|
Et annet alternativ kan være å telle linjene i fila først, for så å
dimensjonere tabellen etterpå. Da blir iallefall størrelse på tabellen
korrekt.
Et godt tips er også å bruke funksjonen FreeFile for å finne fil-nummer. Da
oppstår det ikke noen konflikter..
eks:
dim iFile as integer
iFile = FreeFile
open <filename> for input as iFile
Line Input #iFile,linier.....
....
Close #iFile
-------------
Magne
"Tomas Christiansen" <toc@blikroer.removethis.dk> wrote in message
news:aiuqfm$19os$1@news.cybercity.dk...
> Thomas Løcke skrev:
> > do while EOF(1)=false
> > taeller=taeller+1
> > redim preserve linier(taeller)
> > line input #1, linier(taeller)
> > loop
> ...
> > Så kan jeg læse indholdet i filen, ligegyldigt hvor stor filen er?
>
> Tjaaa... Hvis du har tid og RAM nok.
>
> Hvis ikke jeg tager meget fejl, gør VB det, ved ReDim Preserve, at
> hele indholdet kopieres til et nyt sted i RAM, hvor der lige netop er
> plads til ét element mere. Det kommer til at tage tid og bruge en hel
> del plads, hvis filen er stor.
>
> Du kan eventuelt starte med:
>
> ReDim linier(1000)
>
> og derefter foretage en check lige inden du indlæser og tildeler det
> indlæste til tabellen, og kun udvide hvis der er behov for det:
>
> If Taeller > UBound(linier) Then
> ReDim Preserve linier(Ubound(linier)+100)
> End If
>
> Til sidst (når løkken er færdig) kan det være nødvendigt at justere
> tabellens størrelse ned:
>
> ReDim Preserve linier(Taeller)
>
> Vælg selv de tal (1000,100) som passer dig bedst.
>
> Bemærk iøvrigt at du kan bruge navnet Tæller i stedet for Taeller.
>
> -------
> Tomas
>
| |
|
|