Hej, NYBIL HejDumpa ut text från fil till sträng
Jag har en textfil som ser ut som nedan, och vill kunna presentera färg resp märke för en bil med t.ex högsta eller lägsta numret (eller nummer som man själv matar in). Min tanke är då att jag öppnar filen och läser ut allt i en sträng, och i den strängen läser jag sedan in den första bilen. Sedan läser jag fram till nästa bil och kollar det numret, och om det då är högre (och jag skall ha högsta) så ersätter jag bara mina variabler (tex intBilNr, strFarg, strMarke) med de som kommer därefter osv, och när jag läst klart filen så har jag då högsta. Min fråga är då.... kan man läsa fram till EOF, även i en sträng? Eller måste jag kolla hur lång strängen är - och var jag är? Isf - hur håller jag enklast koll på var jag är?
Och framförallt: HUR f*n får jag in texten i filen i en sträng? Att öppna filen är inga probs, och att lägga till text är heller inga probs. Men jag hittar inget kommando för att läsa in all text ifrån en öppen fil till en sträng.
Har ni andra lösningsförslag som ni anser är bättre/snabbare så får ni såklart gärna tipsa om dem också!
mvh Jimpa
NYBIL
bil01
Färg: grön
Märke: Audi
NYBIL
bil02
Färg: grön
Märke: Audi
NYBIL
bil03
Färg: grön
Märke: Audi
NYBIL
bil04
Färg: grön
Märke: AudiSv: Dumpa ut text från fil till sträng
bil01
Färg: grön
Märke: Audi
NYBIL
bil02
Färg: grön
Märke: Audi
NYBIL
bil03
Färg: grön
Märke: Audi
NYBIL
bil04
Färg: grön
Märke: Audi
ex.
<code>
class bil
Option Explicit
'local variable(s) to hold property value(s)
Private mvarfarg As String 'local copy
Private mvarmarke As String 'local copy
Private mvarregnr As String 'local copy
Public Property Let regnr(ByVal vData As String) mvarregnr = vData
End Property
Public Property Get regnr() As String
regnr = mvarregnr
End Property
Public Property Let marke(ByVal vData As String)
mvarmarke = vData
End Property
Public Property Get marke() As String
marke = mvarmarke
End Property
Public Property Let farg(ByVal vData As String)
mvarfarg = vData
End Property
Public Property Get farg() As String
farg = mvarfarg
End Property
'I formulär:
dim billista as collection
i form_load:
set billista = new collection
private sub lasInBilar()
dim fil as integer
dim tmpStr as String
dim tmpBil as Bil
dim raknare as integer.
Open filnamn For Input As #fil
raknare = 0
do
Read #fil, tmpStr
raknare = raknare + 1
if tmpStr = "NYBIL" then
set tmpBil = new Bil
raknare = 0
else
if raknare = 1 then tmpbil.regnr = tmpStr
if raknare = 2 then tmpBil.farg = tmpStr
if raknare = 3 then tmpBil.marke = tmpStr
end if
billista.add(tmpbil)
loop until EOF
End Sub
</code>
detta exempel borde fungera. Har inte testat men om du gör så här slipper du läsa in allt på en gång. Borde vara enklare att lägga all info om en bil på samma rad och sen separera den med komman eller något liknande. Då kan du köra en read och sedan bara tilldela rätt del av strängen till rätt variabel.
Vill du ta reda på något om bilarna går du bara igenom billistan tex:
<code>
for i = 1 to billista.count
tmpstr = billista(i).farg
next i
</code>
Hoppas det fungerar för dig!
//EmmaSv: Dumpa ut text från fil till sträng
Så här skulle jag gjort.
Option Explicit
Private Sub Command1_Click()
Dim strBuffer As String, FileNum As Long
Dim strSize As Long, BilArray() As String
FileNum = FreeFile
Open "C:\BilTest.txt" For Binary As #FileNum
strSize = LOF(FileNum)
strBuffer = Space$(strSize)
Get #FileNum, , strBuffer
'Nu ligger hela texten i strBuffer max 64 k
Close #FileNum
BilArray = Split(strBuffer, vbCrLf)
'Nu har du alla orden åtskilda i BilArray
'med början BilArray(0) till Ubound(BilArray)
End Sub
mvh
Sven