/ Forside/ Teknologi / Udvikling / VB/Basic / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Redigere/Slette fra en txt fil
Fra : crha
Vist : 819 gange
100 point
Dato : 02-02-06 16:47

Hejsa

Jeg har et lille problem jeg håber der er nogen der kan hjælpe mig med.

Jeg har lavet et lille program der henter nogle data fra en fil ind i en ListView. Strukturen af denne fil er som følgende:

navn1;alder1;adresse1
navn2;alder2;adresse2
navn3;alder3;adresse3

dette laver derfor 3 input på listen. Jeg har lavet en funktion der kan tilføje en ekstra linie til denne fil, men jeg vil også gerne være istand til f.eks. at slette eller redigere linie 2 eller 17 for den sags skyld.

Eneste måde jeg pt. kan forestille mig, er at gennemløbe en løkke der tæller en linie ned x antal gange og derfra redigerer eller sletter den pågældende linie. Jeg aner bare ikke hvilke kode man skal skrive for at slette eller modificere.

På forhånd tak!

 
 
Kommentar
Fra : snortop


Dato : 02-02-06 18:36

Jeg mener heller ikke der er nogle kommando til at slette 1 linie eller flere..

Den løsning jeg selv har brugt er at læse filen ind i hukommelsen, slet linien i hukommelsen og gem den igen!

Men hvis der er en nemmer løsning lytter jeg da også gerne med :D

Kommentar
Fra : transor


Dato : 02-02-06 20:25

Løsningen afhænger helt af hvad du har brugt til at lave dit program med.
Når du ikke har angivet det, må du nøjes med nogle principielle betragtninger.

Det ser ud som om det du laver i princippet er en simpel sekventiel fil uden en nøgle til de enkelte poster.

Du kan med den udformning kun finde en bestemt post ved at læse forfra og tælle dig frem eller læse alle poster og lede efter et bestemt indhold i posten. Det er besværligt og tidsrøvende når filen bliver stor. Det vil også kræve at du bruger et programmeringssprog som har de nødvendige faciliterer. Det kunne f.eks være Pascal.

I stedet kan du bruge et databaseprogram med indexfil på en bestemt nøgle. Så bliver det let og hurtigt at tilgå en bestemt post.

Der findes mange databaseprogrammer, noge er simple og gratis eller billige, men vil sikkert nemt kunne det du har brug for. De små billige med få faciliteter er også nemmest at lære at bruge.

Accepteret svar
Fra : CADmageren

Modtaget 100 point
Dato : 03-02-06 11:26

På vore dages pc´er er det ikke noget problem at indlæse en sekventiel fil, hver mindre den er rigtig rigtig stor. Så du kan sagtens indlæse en sekventiel fil i et array.
Jeg har testet med en fil, med 100.000 linier - Det tager 0.25 sekunder at skrive og indlæse denne.

Private Sub Command1_Click()
' Skriv test sekventiel fil
Dim tid As Variant
tid = Timer
Dim i As Long
Open "C:\temp\xxx.txt" For Output As #1
For i = 1 To 100000
Print #1, Timer
Next
Close
MsgBox "Forbrugt tid: " & Timer - tid
End Sub


Private Sub Command1_Click()
' Skriv test sekventiel fil
Dim tid As Variant
tid = Timer
Dim i As Long
Open "C:\temp\xxx.txt" For Output As #1
For i = 1 To 100000
Print #1, i
Next
Close
MsgBox "Forbrugt tid: " & Timer - tid
End Sub


Private Sub Command2_Click()
' Indlæs sekventiel fil
Dim tid As Variant
tid = Timer
Dim sLines() As String
ReDim sLines(0)
Dim nLines As Long
nLines = -1
Open "C:\temp\xxx.txt" For Input As #1
Do While Not EOF(1)
nLines = nLines + 1
ReDim Preserve sLines(nLines)
Line Input #1, sLines(nLines)
Loop
Close
MsgBox "Forbrugt tid: " & Timer - tid & vbNewLine & "Antal Linier " & nLines

IndSaetLinie "Hello World", 8, sLines, nLines
SletLinie 5, sLines, nLines

Open "C:\temp\xxx.txt" For Output As #1
For i = 0 To nLines
Print #1, sLines(i)
Next
Close
End Sub
Sub SletLinie(iSletDenne As Long, sLines() As String, nLines As Long)
Dim i As Long
nLines = nLines - 1
For i = iSletDenne - 1 To nLines
sLines(i) = sLines(i + 1)
Next
ReDim Preserve sLines(nLines)
End Sub

Sub IndSaetLinie(sText As String, iFoerDenne As Long, sLines() As String, nLines As Long)
Dim i As Long
nLines = nLines + 1
ReDim Preserve sLines(nLines)
For i = nLines To iFoerDenne Step -1
sLines(i) = sLines(i - 1)
Next
sLines(iFoerDenne - 1) = sText
End Sub

Mvh
Michael Christoffersen




Godkendelse af svar
Fra : crha


Dato : 03-02-06 23:11

Tak for svaret CADmageren.

Det kan jeg bruge

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.
Søg
Reklame
Statistik
Spørgsmål : 177424
Tips : 31962
Nyheder : 719565
Indlæg : 6407903
Brugere : 218877

Månedens bedste
Årets bedste
Sidste års bedste