Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Manu

Anmeldungsdatum: 16.07.2006 Beiträge: 174 Wohnort: Bayern
|
Verfasst am: 20.07.2006, 10:37 Titel: In einer Textdatei eine bestimmte Zeile bearbeiten? |
|
|
Wie bearbeite ich in einer Textdatei eine Bestimmte Zeile und bearbeite diese ohne das ich die anderen Zeilen löschen
welchen Zugriffsmodus benötge ich da?
Danke im Voraus
mfg Manu
ist es auch möglich in einer textdatei gewisse zeilen zu löschen und die anderen zeilen dann nachzurücken zu lassen sprich das dort wo die zeilen gelöscht wurden der rest dahinter dann nachrückt
Editiert durch Moderator: Überflüssige Fragezeichen entfernt. (A.K.) |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 20.07.2006, 11:27 Titel: |
|
|
Das geht so einfach leider nicht... Du musst erst die ganze Datei in ein Array laden, und dann
die gewünschte Zeile in GEstalt des entsprechenden Array-Eintrages entfernen und dann
das ganze Array zurückschreiben...
Einfacher geht es mit einer temporären Datei, dazu hier mein Beispiel:
Code: |
Datei$ = "test.txt"
TmpDatei$ = "tmp.tmp"
ZuLoescheneZeile% = 15
' Dateien öffnen
OPEN Datei$ FOR INPUT AS #1
OPEN TmpDatei$ FOR OUTPUT AS #2
' Daten schreiben
LineCount% = 0
DO UNTIL EOF(1)
LineCount% = LineCount% + 1
LINE INPUT #1, Zeile$
IF LineCount% <> ZuLoeschendeZeile% THEN
PRINT #2, Zeile$
END IF
LOOP
' Dateien schließen
CLOSE
' Alte Datei löschen und temporäre Datei nach ihr benennen
KILL Datei$
SHELL "rename " + TmpDatei$ + " " + Datei$
END
|
Der Code ist jetzt nicht gestestet und ist auch noch optimierungsfähig.
Soll nur das Prinzip erklären
/edit: Rechtschreibfehler im Code behoben...
jb _________________ Elektronik und Programmieren
Zuletzt bearbeitet von jb am 20.07.2006, 12:56, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Manu

Anmeldungsdatum: 16.07.2006 Beiträge: 174 Wohnort: Bayern
|
Verfasst am: 20.07.2006, 12:20 Titel: |
|
|
für was ist linecount = linecount + 1 gut??? |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 20.07.2006, 12:46 Titel: |
|
|
Das zählt die Zeilen in der Datei mit.
Immer wenn eine Zeile eingelesen wurde, wird der Zähler um einen erhöht.
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
Elvis

Anmeldungsdatum: 01.06.2006 Beiträge: 818 Wohnort: Deutschland, BW
|
Verfasst am: 20.07.2006, 15:40 Titel: |
|
|
Noch ne andere Möglichkeit:
Code: |
'Inhalt Test.txt:
'
'a
'b
'c
'd
'e
'f
'g
OPEN "Test.txt" FOR INPUT AS #1 'Öffne Datei zum lesen
INPUT #1, a$ 'Lese ein: "a" und speichere als a$
INPUT #1, b$ 'Lese ein: "b" und speichere als b$
INPUT #1, c$ 'Lese ein: "c" und speichere als c$
INPUT #1, d$ 'Lese ein: "d" und speichere als d$
INPUT #1, e$ 'Lese ein: "e" und speichere als e$
INPUT #1, f$ 'Lese ein: "f" und speichere als f$
INPUT #1, g$ 'Lese ein: "g" und speicher als g$
CLOSE #1 'Datei schließen
KILL "Test.txt" 'Datei löschen
OPEN "Test.txt" FOR OUTPUT AS #1 'Datei zum schreiben öffnen
PRINT #1, b$ 'Hineinschreiben: b$
PRINT #1, c$ 'Hineinschreiben: c$
PRINT #1, d$ 'Hineinschreiben: d$
PRINT #1, e$ 'Hineinschreiben: e$
PRINT #1, f$ 'Hineinschreiben: f$
PRINT #1, g$ 'Hineinschreiben: g$
CLOSE #1 'Datei schließen
|
Natürlich kann man den Code mit Arrays ein wenig schlanker machen...
Grüße, Elvis |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 21.07.2006, 11:18 Titel: |
|
|
Uah... Ds sieht aber sehr nach Copy'n'Paste aus
Da sind Arrays echt besser.
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
Elvis

Anmeldungsdatum: 01.06.2006 Beiträge: 818 Wohnort: Deutschland, BW
|
Verfasst am: 21.07.2006, 18:00 Titel: |
|
|
Is es aber nich...
Hab halt nen seeeeeeehr eigenen Programmierstil (GW-Basic)...
Das hier ist jetzt nur eine Stichprobe.
Normalerweise benutze ich Zeilenmarken, GOTO, ausschließlich interne SUB's, sowenig wie möglich Bibliotheken...
Also alles was die perfekt Spaghetti-Programmierung ausmacht!
Aber trotz allem finde ich mich sehr gut in meinem Code zurecht...
Grüße, Kay |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
|
Nach oben |
|
 |
SpionAtom
Anmeldungsdatum: 10.01.2005 Beiträge: 395
|
Verfasst am: 23.07.2006, 09:49 Titel: |
|
|
@manu
Wenn du immer bestimmte Zeilen bearbeiten willst, rate ich dir, dich näher mit dem RANDOM ACCESS Modus zu befassen (ich hoffe, das hieß so ).
Jedenfalls meine ich den Modus mit dem wahlfreien Zugriff.
Dann brauchst du lediglich die "Zeilennummer" angeben, die du auslesen oder schreiben willst. Zeilennummer steht in Anführungszeichen, weil es sich dann nicht mehr wirklich um Ascii oder Zeilen handelt.
Und das ist auch der Nachteil daran, man kann die Dateien dann nicht mehr im Notepad bearbeiten.
Ich hab früher gedacht, das lern ich nie mit dem Random Access, aber egentlich kann man es fast so bedienen wie ein Array. Aber du findest bestimmt in der Hilfe genügend Infos. _________________ Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht. |
|
Nach oben |
|
 |
Manu

Anmeldungsdatum: 16.07.2006 Beiträge: 174 Wohnort: Bayern
|
Verfasst am: 23.07.2006, 13:16 Titel: |
|
|
könntest du da mal ein Beispiel posten? |
|
Nach oben |
|
 |
SpionAtom
Anmeldungsdatum: 10.01.2005 Beiträge: 395
|
Verfasst am: 23.07.2006, 14:47 Titel: |
|
|
In diesem Beispiel werden 10 Strings nacheinander in eine Datei geschrieben. Und anschließend wieder ausgelesen.
Code: |
'Erstmal Datei ”ffnen.
'Achtung! Bestehende Dateien werden ohne Warnung ver„ndert!
datei$ = "test.dat"
dateinr = FREEFILE
OPEN datei$ FOR RANDOM AS #dateinr
'Schreibe Zahlen und ihre Quadrate in die Datei
CLS
PRINT "Schreibe Daten in Datei "; datei$
FOR i = 1 TO 10
'Hier denke ich mir einen String aus
zeile$ = LTRIM$(STR$(i)) + " --> " + LTRIM$(STR$(i * i))
PRINT zeile$
'Das Schreiben in die Datei mit put
'i ist hier quasi die Zeile, in die geschrieben wird
'Was man nun immer wissen muss, ist, welchen Datentyp man
'in die Zeile schreibt. Das ist f?r das Auslesen hinterher
'wichtig
PUT #dateinr, i, zeile$
NEXT
PRINT
'------------------------------------------------------------------------------
'Lese Daten aus Datei aus
PRINT "Lese Daten aus Datei "; datei$
FOR i = 1 TO 10
GET #dateinr, i, lese$
PRINT lese$
NEXT
CLOSE
|
_________________ Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht. |
|
Nach oben |
|
 |
|