Hej! Först läser du in hela raden som en enda sträng, precis som alla andra filer man läser in. Exempel: ska prova detta ! tack Du får räkna upp en variabel i loopen vid filinläsningen. Det går inte att ange att du vill läsa in bara den tredje raden utan du måste läsa in rad 1 - 3 och samtidigt räkna upp en variabel så att du vet vilken rad du är på. Missade 3:e raden Så här löser jag det Till Pelle >kommer smälla om det inte finns 3 rader, det gör inte mitt ;-) Jag är inte lättstött och erkänner när jag har fel, vilket är ofta. Man kan också använda en funktion jag inte tror många vet om dock: mmm. Funkar det så är det ju en kanonlösning ! Du måste använda binary och typa ditt indata - men i detta fallet går det ju bra då det verkar vara fastlängd på samtliga fält. hem de fungerar görbra, jag valde attt använda Då blir min lösning såhär. Jag visar resultat i en list boxhantering av data - ocr- filer från banken
här nedan hittar ni innehållet i en sk ocr-fil
NY000010000080800170031000102000000000000000000000000000000000000000000000000000
NY090020001767676000000199991111111000000000000000000000000000000000000000000000
NY09103000000012403040124112345000000000000044000 33000083672049000000
NY091031000000160004322610945611540000000230304888810111280000000000000000000000
NY09103000000022403040124112345000000000000008000 33000158843046000000
NY091031000000260004333650944552120000000230304888810111360000000000000000000000
NY09103000000032403040124112345000000000000150000 33000163680003000000
NY091031000000360004332510965888510000000230304888810111440000000000000000000000
NY09103000000042403040124112345000000000000150000 33000164573025000000
NY091031000000460004336140945666540000000230304888810111520000000000000000000000
NY09103000000052403040124112345000000000000350000 33000167698019000000
NY091031000000560004336710945141610000000230304888810111520000000000000000000000
NY09103000000062403040124112345000000000000160000 33000170130034000000
NY091031000000660004322160981454110000000230304888810111600000000000000000000000
NY09103000000072403040124112345000000000000120000 33000173783060000000
NY091031000000760004321650955451220000000230304888810111790000000000000000000000
NY09133000000082403040124967890000000000000090000 01000000258037000000
NY091331000000800000000006001011400000000240304888810111870000000000000000000000
NY09133000000092403040124967890000000000000010000 01000000368026000000
NY091331000000900000000006105011380000000240304888810111870000000000000000000000
NY09133000000102403040124967890000000000000175000 01000000407048000000
NY091331000001000000000006001011400000000240304888810111870000000000000000000000
NY09133000000112403040124967890000000000000150000 01000000488022000000
NY091331000001100000000006105011380000000240304888810111870000000000000000000000
NY09133000000122403040124967890000000000000015000 01000000608025000000
NY091331000001200000000006105011380000000240304888810111870000000000000000000000
NY09133000000132403040124967890000000000000036000 01000000717040000000
NY091331000001300000000006001011400000000240304888810111870000000000000000000000
NY09133000000142403040124967890000000000000060000 01000000768035000000
NY091331000001400000000006105011380000000240304888810111870000000000000000000000
NY09133000000152403040124967890-00000000000025000 44000366370078000000
NY091331000001500000000006001011400000000240304888810111870000000000000000000000
NY09133000000162403040124967890-00000000000040000 44000366980090000000
NY091331000001600000000006001011400000000240304888810111870000000000000000000000
NY09133000000172403040124967890-00000000000150000 44000007860156000000
NY091331000001700000000006105011380000000240304888810111870000000000000000000000
NY09133000000182403040124967890000000000000030000 44000000380020000000
NY091331000001800000000005802017930000000240304888810111950000000000000000000000
NY09133000000192403040124967890000000000000010000 44000000560084000000
NY091331000001900000000005802017930000000240304888810111950000000000000000000000
NY09133000000202403040124967890000000000000015000 44000000640092000000
NY091331000002000000000005802017930000000240304888810111950000000000000000000000
NY09133000000212403040124967890000000000000045000 44000000730042000000
NY091331000002100000000005802017930000000240304888810111950000000000000000000000
NY09133000000222403040124967890000000000000075000 44000001060027000000
NY091331000002200000000005986667840000000240304888810111010000000000000000000000
NY09133000000232403040124967890000000000000085000 44000001100070000000
NY091331000002300000000005986667840000000240304888810111010000000000000000000000
NY090088000000230000004800000000001563000240304240304240304000000000000000000000
NY000089000000230000005000000000001563000240304000000000000000000000000000000000
om man kollar på 3dje raden så hittar man 44000 och 33000083672049 , om jag vill få ut dessa till 2 st strängar, hur gör jag?? den förstnämnda är i pos 33-49 och den andra är i position 50-74, hur gör man??
det ovan ä en ocrfil från banken som ska in i mitt reskontraSv: hantering av data - ocr- filer från banken
Sen med funktionen MID på radsträngen så skapar du två strängar.Sv: hantering av data - ocr- filer från banken
<code>
Open app.path & "\filnamn.ocr" for input as #1 Len = 512
do while not eof(1)
line input #1, buffer
varde1 = mid(buffer,33, 16)
varde2 = mid(buffer,50, 14)
debug.print varde1 & "-" & varde2
loop
close #1
</code>Sv: hantering av data - ocr- filer från banken
men hur vet den att den är på 3dje radenSv: hantering av data - ocr- filer från banken
Sv: hantering av data - ocr- filer från banken
Exempel:
<code>
Open app.path & "\filnamn.ocr" for input as #1 Len = 512
do while not eof(1)
currentline = currentline + 1
line input #1, buffer
if currentline = 3 then
varde1 = mid(buffer,33, 16)
varde2 = mid(buffer,50, 14)
debug.print varde1 & "-" & varde2
exit do
end if
loop
close #1
</code>Sv: hantering av data - ocr- filer från banken
<code>
Option Explicit
Private Sub Command1_Click()
Dim Fnum As Long, MySplit() As String
Dim dummy As String, MyStr As String
Fnum = FreeFile
Open App.Path & "\OCR.txt" For Input As #Fnum
Line Input #Fnum, dummy 'rad 1
Line Input #Fnum, dummy 'rad 2
Line Input #Fnum, MyStr 'intressant rad
Close #Fnum
MySplit = Split(MyStr)
MyStr = Right$(MySplit(0), 5) & " " & _
Left$(MySplit(11), 14)
MsgBox MyStr
End Sub
</code>Sv: hantering av data - ocr- filer från banken
När jag kollar din kod så undrar jag vilken nybörjarbok du hämtar din kod.
Är det med samma stuk på koden som byggt denna site så förklarar det en hel del !
Varför i hela fridens namn skall man skriva "do while not eof(1)"
Varför blanda in Not ?
Är du säker på att #1 är ledig ? mm mm. nybörjarkod som man lärde sig på 1980 talet
När man gör sig besvär att svara så kan man begära att det blir annat än dålig nybörjarkod
Nu verkar det som du svarar bara för att markera att du också finns !Sv: hantering av data - ocr- filer från banken
Kan jag säga att ditt program kommer smälla om det inte finns 3 rader, det gör inte mitt ;-) Men jag håller med dig, det är en QD att inte använda freefile.Sv: hantering av data - ocr- filer från banken
Bra Pelle , du tål "stryk och påhopp" Det hedrar dig.
Han specifierade just rad 3 i frågan,jag försöker efter bästa förmåga
svara exakt på det dom frågar efter.
Nu förstår du också att man med en enkel Forsats kan välja vilken rad man vill.
Skulle det röra sig om tex rad 11 så är det optimalt att skriva
"top down" med dummy som jag visar på.
Ha detSv: hantering av data - ocr- filer från banken
Seek #1, 3
Dvs, ställ dig på rad 3 direkt.Sv: hantering av data - ocr- filer från banken
Har bara användt Seek när jag skall hitta nästa byte i en Open For Binary
Funkar verkligen detta i Line Input ? mmmmmmmmmmmm......... ?
Eller är det "snabbt och fel" ?Sv: hantering av data - ocr- filer från banken
Sv: hantering av data - ocr- filer från banken
Dim Fnum As Long, MySplit() As String
Dim dummy As String, MyStr As String
Fnum = FreeFile
Open App.Path & "\a.ocr" For Input As #Fnum
Line Input #Fnum, dummy 'rad 1
Line Input #Fnum, dummy 'rad 2
Line Input #Fnum, MyStr 'intressant rad
Close #Fnum
MySplit = Split(MyStr)
Label1 = Right$(MySplit(0), 5)
Label2 = Left$(MySplit(11), 14)
...
...jag får ut det resultat jag vill. ..men det jag nu vill göra med det är att jag vill hämta in alla rader variabler tex göra en loop som hämtar in samma data från rad 3, 5, 7, 9 osv.. dvs var annan rad ända ner till näst näst sista raden. dvs sista och näst sista raden säger mig egentligen bara att meddelandet är slut.
nån som har ett tips hur man kan göra det?? jag vet inte riktigt hur denna #FNUM funktion fungerar...
tackar på förhandSv: hantering av data - ocr- filer från banken
#Fnum tar reda på ett ledigt filnummer.Ser ofta att Ni skriver #1
Det är inte säkert att #1 är ledig så använd alltid FreeFile
<code>
Option Explicit
Private Sub Command1_Click()
Dim Fnum As Long, MySplit() As String
Dim i As Long, dummy As String, MyStr As String
Fnum = FreeFile
Open App.Path & "\a.ocr" For Input As #Fnum
Line Input #Fnum, dummy 'rad 1
Line Input #Fnum, dummy 'rad 2
i = 3
On Error Resume Next
Do Until EOF(Fnum)
If i Mod 2 > 0 Then 'tar bara udda rader
Line Input #Fnum, MyStr 'intressant rad
MySplit = Split(MyStr)
MyStr = Right$(MySplit(0), 5) & " " & _
Left$(MySplit(11), 14)
If Err = 9 Then Exit Do 'skippa sista raden
List1.AddItem MyStr
Else
Line Input #Fnum, dummy 'rad
End If
i = i + 1
Loop
Close #Fnum
On Error GoTo 0 ' Återställ Error
End Sub
</code>