In een txt een regel omhoog?

Status
Niet open voor verdere reacties.

BasHD

Gebruiker
Lid geworden
2 dec 2008
Berichten
99
Hallo forummers,

Ik kan met de code

line input#1, regel


vanaf een positie in een txt een regel naar beneden en dan weer verder met uitlezen. Hoe ga ik een regel omhoog?

Groeten,

Bas
 
Laatst bewerkt:
Hallo forummers,

Ik kan met de code

line input#1, regel


vanaf een positie in een txt een regel naar beneden en dan weer verder met uitlezen. Hoe ga ik een regel omhoog?

Groeten,

Bas
Onthoudt je regel nummer, sluit je textfile, open je textfile en lees tot regelnummer min één. Piece of cake.
Als het een klein bestand is dan kan je hem inlezen in een array daarmee kan je alle kanten op. Als het een groot bestand is dan kan je hem inlezen in Access/Excel. Dan kan je heen en weer terug.

HTH:D
 
hehe

He Guus,

Ja dat snap ik ook wel. Maar ik wil natuurlijk die txt niet uit. Het is namelijk zo dat ik een txt bestandje inlees die kwa indeling 3 types kent. Tot een bepaalde alinea zijn ze hetzelfde en daarna wisselen ze iets in aantal regels.

Als ie dan een bepaalde begin karakters tegenkomt dan moet ik eigenlijk weer terug naar die witregel. Om dan daarvandaan weer opniew te beginnen met het wegschrijven van de info uit de txt in tabellen.

Alleen die hangt af welke van de 3 txt versie ik heb.

Is er niet iets als Line input#-1, regel o.i.d. Ik heb ook iets met ReadLine gezien maar....

gr

Bas
 
#1 is je filedescriptor. Het is de pointer naar je bestand. Die schuift op bij het volgende commando Line. Sequentieel lezen kan maar één kant op.

Nogmaals, als het niet zo'n groot bestand is, tot 100 regels, dan kan je iedere regel inlezen in een Array. Als die groter is dan zou ik een tabel daarvoor gebruiken.

HTH:D
 
we gaan verder...

Guus,

Geef is iets meer info dan alleen Array. Ik ken dat begrip niet. Kun je me er iets meer achtergrond info over geven?

Gr

Bas
 
Een array is een tabel maar dan in het interne geheugen. Net als een tabel kan een array meerdere dimensies hebben. In jouw geval gebruiken we er 1.

Hieronder een beetje voorbeeldcode.
Code:
Option Compare Database
Option Explicit

Public Function Inlezen(strFilename As String) As Variant
[COLOR="SeaGreen"]'returnvalue is een array[/COLOR].

    Dim intFile     As Integer
    Dim strLine     As String
    Dim intArray    As Integer
    Dim astrArray() As String [COLOR="SeaGreen"]'Lege array wordt geinitieerd[/COLOR]
    
    intFile = FreeFile[COLOR="seagreen"] 'Eerste lege filedescriptor wordt opgehaald. Kan 1 zijn maar ook 23[/COLOR]
    
    Open strFilename For Input As #intFile [COLOR="seagreen"]'File openen[/COLOR]
    intArray = 0 [COLOR="seagreen"]'array elementen initieren[/COLOR]

    Do While Not EOF(intFile)
        Line Input #intFile, strLine [COLOR="seagreen"]'regel inlezen in variabele[/COLOR]
        intArray = intArray + 1
        ReDim Preserve astrArray(intArray)[COLOR="seagreen"] 'redimensioneren van bestaande array. Preserve: met behoud van de bestaande inhoud[/COLOR]
        astrArray(intArray) = strLine [COLOR="seagreen"]'Vullen van array[/COLOR]
    Loop
    
    Close #intFile

    Inlezen = astrArray [COLOR="seagreen"]'returnvalue is een array[/COLOR]

End Function

Public Sub RunMe()
[COLOR="seagreen"]'Deze procedure run je in het immediate window.[/COLOR]

    Dim astrGevuldeArray() As String
    Dim intTeller          As Integer

    astrGevuldeArray = Inlezen("c:\temp\Module_basUtil.txt") [COLOR="seagreen"]'Aanroepen inlees functie[/COLOR]

    For intTeller = 0 To UBound(astrGevuldeArray, 1) [COLOR="seagreen"]'Array doorlopen tot maximum aantal elementen (ubound)[/COLOR]
        Debug.Print astrGevuldeArray(intTeller) [COLOR="seagreen"]'Print resultaat in immediate window[/COLOR]
    Next intTeller
    
    Debug.Print intTeller & " aantal regels"
    
End Sub
In no-time heeft hij 600 regels ingelezen.

Enjoy!
 
Laatst bewerkt:
Dat kan simpeler:

Code:
Sub simpel()
  Open "C:\test.txt" for input as #1
    sq=split(input(LOF(1),#1),vbCrLf)
  Close #1
End Sub

regel 1 komt overeen met sq(0)
regel 2 met sq(1) etc.

sq is een array.
 
@snb: Ik zie dat je snel iets moois in elkaar geflanst hebt. Jammer dat het niet werkt.

Dat kan simpeler:

Code:
Sub simpel()
  Open "C:\test.txt" for input as #1
    sq=split(input(LOF(1),#1),vbCrLf)
  Close #1
End Sub

regel 1 komt overeen met sq(0)
regel 2 met sq(1) etc.

sq is een array.
snb heeft hier gebruik gemaakt van het Split commando die tekst in een array zet mbv een scheidingsteken. Dat scheidingsteken is hier een vbCrLf (carriage return/line feed) ofwel een enter. De code is erg compact en zal zeer waarschijnlijk sneller zijn dan mijn versie. Als je iets meer moet doen dan alleen een tekstbestand inlezen in een array dan zou ik mijn eerste functie gebruiken en anders onderstaande.
Code:
Public Function Inlezen(strFilename as string) as variant
    Dim intFile as integer
    Dim astrArray() as string

    intFile=Freefile

    Open strFilename for Input as #intFile    

    astrArray = Split(Input(LOF(intFile),#intFile),vbCrLf)

    Close #intFile

    Inlezen = astrArray
End function

Enjoy!
 
@Guus2005

Hoezo
jammer dat het niet werkt
?

Kijk eens naar de beginvraag.
Met mijn voorstel kun je eenvoudig regel 5 lezen
regel5=sq(4)

en de regel erboven

regel4=sq(3)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan