|
|
 | læse en bestemt linie med vba i tekst-fi~ Fra : taske | Vist : 1088 gange 140 point Dato : 14-09-04 20:32 |
|
Er der nogle som ved hvordan man i et excel (vba) ark henter en bestemt linie fra en tekst-fil.
Jeg har en fil hvor der hele tiden tilskrives linier, jeg vil med en makro i excel hente og bearbejde de nye linier uden at skulle starte forfra i toppen. makroen skal med et tidsinterval stå og tjekke om der er nyt og så tilføje linier i excel. Listen kan blive lang (35000+ linier) så jeg mangler en metode hvor jeg kan sige at sidst kom jeg til linie 21001 så nu skal jeg starte med at tjekke linie 21002.
Madsen
| |
 | Kommentar Fra : berpox  |
Dato : 14-09-04 22:57 |
|
Denne kodestump åbner vilen TEXTFILE.TXT og ruller den igennem indtil sidste linie der så skrives i celle B1. I A1 skrives antallet af linier.
Kode Sub ReadTextFileLine()
Dim LinesOfText As String
Dim LineNo As Long
LineNo = 0
Open "C:\TEXTFILE.TXT" For Input As #1
Do While Not EOF(1)
Line Input #1, LinesOfText
LineNo = LineNo + 1
Loop
'Close the file
Close #1
Worksheets("Sheet1").Range("A1").Value = LineNo 'write line numbers to Sheet1,cell A1
Worksheets("Sheet1").Range("B1").Value = LinesOfText 'write last line content to Sheet1,cell B1
End Sub |
mvh Berpox
| |
 | Kommentar Fra : berpox  |
Dato : 14-09-04 23:03 |
| | |
 | Kommentar Fra : kafkakim |
Dato : 14-09-04 23:41 |
|
Prøve denne
Kode Dim fso As FileSystemObject
Dim ts As TextStream
Dim buf As String
Dim vbuf As Variant
Set fso = New FileSystemObject
Set ts = fso.OpenTextFile(Path)
dim count as int
count = 1
With ts
While Not .AtEndOfStream
buf = .ReadLine
redim vbuf[count]
vbuf[count] = buf
Wend
.Close
End With |
Nu har du det i en stringarray som du kan indeksere i
Kafka
| |
 | Kommentar Fra : taske |
Dato : 15-09-04 09:59 |
|
Tak for de hurtige svar, men jeg må indrømme at jeg desvære ikke kommer vidre med den nye information.
Men er det muligt at lade funktionen vente 5 sek, når den der kommet til bunden af filen, også køre vidre derfra hvor den kom til.
Vente 5, køre igen, OSV. til den blev afbrudt.
Sagen er at der kan komme 50 linier eller 0 linier på de 5 sek
Madsen
| |
 | Accepteret svar Fra : berpox  |  Modtaget 140 point Dato : 15-09-04 13:03 |
|
Fælles for de her nævnte forslag er at de ÅBNER tekstfilen på et givent tidspunkt. PÅ det tidspunkt er der n linier i teksten.
Derfor er du nødt til at genindlæse filen for at læse videre i filen. Som jeg skriver, så må du bruge ADO'en for at gøre brug af muligheden for at "movelast" - altså åbne filen som et recordset. I din makro kan du så gemme sidste linie som record-nummer, evt. ud i en tekstfil. Næste gang du åbner filen/recordsettet, så kan du flytte dig til recordsetnummer n+1 og læse derfra (indtil EOF).
Hvis din applikation der skriver i tekstfilen derimod kunne skrive i en database, så ville du have mulighed for at holde en connection åben til databasen, og dermed også hele tiden vide hvor du er i recordsettet.
Din Excel makro holdes således kørende og kigger med faste intervaller, om der er kommet ekstra linier til i databasen.
Det kan du altså ikke med en tekstfil, og det uanset om du bruge min metode, eller filesystemobject i flg. kafkakim.
mvh Berpox
| |
 | Godkendelse af svar Fra : taske |
Dato : 15-09-04 22:07 |
|
Tak for svaret berpox.
det virker nu ikke endnu men jeg kan godt se at du har vist den rigtige vej, dog er det nok lidt for langhårte til mig
| |
 | Du har følgende muligheder | |
|
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.
Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
| |
|
|