Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

In einer Textdatei eine bestimmte Zeile bearbeiten?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Manu



Anmeldungsdatum: 16.07.2006
Beiträge: 174
Wohnort: Bayern

BeitragVerfasst am: 20.07.2006, 10:37    Titel: In einer Textdatei eine bestimmte Zeile bearbeiten? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 20.07.2006, 11:27    Titel: Antworten mit Zitat

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 lächeln

/edit: Rechtschreibfehler im Code behoben...

jb
_________________
Elektronik und Programmieren


Zuletzt bearbeitet von jb am 20.07.2006, 12:56, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Manu



Anmeldungsdatum: 16.07.2006
Beiträge: 174
Wohnort: Bayern

BeitragVerfasst am: 20.07.2006, 12:20    Titel: Antworten mit Zitat

für was ist linecount = linecount + 1 gut???
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 20.07.2006, 12:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Elvis



Anmeldungsdatum: 01.06.2006
Beiträge: 818
Wohnort: Deutschland, BW

BeitragVerfasst am: 20.07.2006, 15:40    Titel: Antworten mit Zitat

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... zwinkern


Grüße, Elvis
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 21.07.2006, 11:18    Titel: Antworten mit Zitat

Uah... Ds sieht aber sehr nach Copy'n'Paste aus zwinkern
Da sind Arrays echt besser.

jb
_________________
Elektronik und Programmieren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Elvis



Anmeldungsdatum: 01.06.2006
Beiträge: 818
Wohnort: Deutschland, BW

BeitragVerfasst am: 21.07.2006, 18:00    Titel: Antworten mit Zitat

Is es aber nich...
Hab halt nen seeeeeeehr eigenen Programmierstil (GW-Basic)... grinsen
Das hier ist jetzt nur eine Stichprobe. cool
Normalerweise benutze ich Zeilenmarken, GOTO, ausschließlich interne SUB's, sowenig wie möglich Bibliotheken... durchgeknallt
Also alles was die perfekt Spaghetti-Programmierung ausmacht! happy
Aber trotz allem finde ich mich sehr gut in meinem Code zurecht... zwinkern


Grüße, Kay
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 22.07.2006, 12:57    Titel: Antworten mit Zitat

Na wenn du meinst...

jb
_________________
Elektronik und Programmieren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
SpionAtom



Anmeldungsdatum: 10.01.2005
Beiträge: 395

BeitragVerfasst am: 23.07.2006, 09:49    Titel: Antworten mit Zitat

@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 verwundert ).
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Manu



Anmeldungsdatum: 16.07.2006
Beiträge: 174
Wohnort: Bayern

BeitragVerfasst am: 23.07.2006, 13:16    Titel: Antworten mit Zitat

könntest du da mal ein Beispiel posten?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
SpionAtom



Anmeldungsdatum: 10.01.2005
Beiträge: 395

BeitragVerfasst am: 23.07.2006, 14:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz