Avatar billede faxy Nybegynder
07. november 2006 - 20:06 Der er 5 kommentarer og
1 løsning

skrivning og henting af data fra tekstfil , til vb

jeg sidder i vs2005 og har følgende opgave som jeg ikke kan finde ud af, jeg er rimelig ny så skal bruge en lettere kodning og forklaring, så hvis kodning er meget uoverskueligt må der gerne være en forklaring, da jeg skal kunne forklare hvad jeg gør.

jeg skal fra et program,

gå ned i en txt fil, på en bestemt linie og hente en sti f.eks c:\test.txt op i en variabel. 

jeg skal også kunne gå ned og skrive i en bestemt linie i en txt fil, replace det der står.

men især kodningen omkring finde en bestemt linie i en fil, og ændre eller læse er altså det vigtigeste.

så har jeg lige endnu en forespørgsel, kan man skrive kode som man går ned finder en fil i en mappe, tjekker størrelsen, om den stiger ? ... og hvis den ikke er blevet større i noget tid så skal den udførere en handling.

og ved der er nogle andre emner om dette, men ingen af dem har lige givet så meget mening for mig.

husk vb2005 ...

held og lykke hehe
Avatar billede learningvba Nybegynder
08. november 2006 - 07:57 #1
Nedenstående er lidt inspiration til dit problem vedr. læsning og skrivning.

Sub Eksempel()
  Const BestemtLinie As Long = 4
  Dim iFilNr As Integer
  Dim lLineNo As Long
  Dim sIndStreng As String
  Dim aStrenge() As String
  Dim lLong As Long
  'Finde bestemt linie.
  iFilNr = FreeFile
  Open "C:\Temp\Test.txt" For Input As #iFilNr
  lLineNo = 0
  While Not EOF(iFilNr)
      Line Input #iFilNr, sIndStreng
      lLineNo = lLineNo + 1
      Select Case lLineNo
        Case BestemtLinie
            MsgBox sIndStreng, vbOKOnly, "Dette er den bestemte linie"
        Case Else
            Debug.Print "Ignoreret: " & sIndStreng
      End Select
  Wend
  Close #iFilNr
  'Erstatte ønsket linie
  '1) indlæs indholdet i filen.
  iFilNr = FreeFile
  Open "C:\Temp\Test.txt" For Input As #iFilNr
  ReDim aStrenge(0)
  While Not EOF(iFilNr)
      ReDim Preserve aStrenge(UBound(aStrenge) + 1)
      Line Input #iFilNr, aStrenge(UBound(aStrenge))
  Wend
  Close #iFilNr
  '2) foretag erstatning, her er det linie 2 der erstattes.
  aStrenge(2) = "Davs" 'Check evt. om Ubound(aStrenge) er
                      'lig med/større end den du vil erstatte
  '3) skriv ny fil.
  iFilNr = FreeFile
  Open "C:\Temp\Test2.txt" For Output As #iFilNr
  For lLong = 1 To UBound(aStrenge)
      Print #iFilNr, aStrenge(lLong)
  Next lLong
  Close #iFilNr
End Sub

I tekstfiler kan man ikke "bare lige" erstatte en linie, men er nødt til at indlæse hele filen og skrive den igen.
Vær derfor opmærksom på at der bliver skrevet til en ny fil, dvs. der foregår ikke en reel erstatning.
Du kan i din egen kode vælge at skrive til den samme fil (brug Kill-kommandoen til at fjerne filen) eller omdøbe den nye fil til den gamles navn (slet den gamle fil først :-) )

Ang. din anden forespørgsel, så er svaret ja.
Du skal dog finde et sted/en måde hvor du gemmer størrelse+dato så du har noget at checke imod. Det kan være en .ini-fil eller et sted i registreringsdatabasen.

Håber det kunne hjælpe dig lidt på vej.
Avatar billede faxy Nybegynder
08. november 2006 - 09:10 #2
mange tak for hjælpen indtil videre, dog når jeg kopier din kode ind, siger den bare jeg er en idiot , og mangler erfaring til at løse det.

har en knap og en textbox på min form, målet er den skal skyde linie jeg vælger ud i txtboxen .

men det jo .net, og den siger fejl ved nogle af ordene og sådan, det funkede i hvertfald ikke
Avatar billede faxy Nybegynder
08. november 2006 - 09:41 #3
jeg kan forenkle vores opgave lidt

vi har en fil bestående af 6 linier eller sådan

på den 6 linie står der

file<0 c:\test.txt

den skal altså finde den linie der står file<0 og derefter tage stien , og smide det i en variabel .
Avatar billede timmeren Nybegynder
08. november 2006 - 12:41 #4
' åbner filen, og skriver data til variablerne
        Dim fs As FileStream = File.OpenRead("c:\test.txt")
        Dim sr As New StreamReader(fs)
        Dim text As String = sr.ReadToEnd()
        fs.Close()

        ' Splitter koden ind i en array
        Dim lines() As String = Split(text, vbCrLf)

        ' ændre linie 6 i filen til det vi siger den skal være
        lines(3) = "ændret tekst"


        'ændre txtboksen til det nye
        TextBox1.Text = lines(6)


        'ligger arrayen over i en string variabel igen
        text = Join(lines, vbCrLf)

        'skyder de nye data ned i filen, overskriver.
        Dim sw As StreamWriter = File.CreateText("c:\test.txt")
        sw.Write(text)
        sw.Close()

håber koden giver lidt mening ellers må du bare spørger .

denne henter fra en fil ind i nogle variabler splitter den, og du kan herefter ændre den linie du vil, og det bare og sætte noget textbox.text = lines(0) & lines(1) for at få den ud i din txtbokx
Avatar billede faxy Nybegynder
08. november 2006 - 12:45 #5
heh, bare lidt et svar timmeren !
Avatar billede timmeren Nybegynder
08. november 2006 - 12:49 #6
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester