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:

Zeilen in Datei

 
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
Meteorus



Anmeldungsdatum: 03.02.2007
Beiträge: 405

BeitragVerfasst am: 23.02.2007, 00:44    Titel: Zeilen in Datei Antworten mit Zitat

Hallo

Ich habe eine Textdatei, wo ich mehrere Begriffe untereinader stehen habe. Mein Problem ist, dass ich nicht weiß, wie ich Wörter in ganz bestimmte Zeilen schreiben kann. Zum Beispiel sieht es so in der Textdatei aus:

"erstes Wort"
"zweites Wort"
"drites Wort"
""
""
""

Wie schafe ich es die fünfte Zeile zu ersetzten? z.B. mit "egal"

damit man sich es vorstellen kann, soll es anschliesend so aussehen:

"erstes Wort"
"zweites Wort"
"drites Wort"
""
""
"egal"


Ich hoffe auf Antworten. Und Danke schonmal im vorraus.

mfg Meteorus[/quote]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 23.02.2007, 01:33    Titel: Antworten mit Zitat

Das geht nicht.

Du musst entweder die gesammte Datei neu schreiben, oder den rest, ab dem ersatz.

Es ist nicht so, das du Zeilen" im sinne einer eindlos langen Zeile in der datei hast, sonder, du hast eine Zeile, die nach dem wort mit einem "Zeilenumbruch" endet. dieser Umbruch wird durch 2 ASCII-Zeichen symbolisiert, die du nicht siehst. (ASCII 10 und ASCII 13) einmal LF (Linefeed) und CR (Char Returne).

Wenn du nun eine "leere zeile" im grunde nur ein 10/13 "ersetzen" willst, dann überschreibst du diesen zeilenumbruch, und die darauffolgenden daten.

Sieht dann z.B. so aus:
Code:

Zeile1(CR/LF)
Zeile2(CR/LF)
Zeile3(CR/LF)
(CR/LF)
Zeile5(CR/LF)
Zeile6(CR/LF)
(CR/LF)
(CR/LF)
Zeile9(CR/LF)
...


wenn du nun etwas in diese zeile einfügst, dann überschreibst du den rest
Zitat:

...
Zeile3(CR/LF)
(CR/LF)
Zeile5(CR/LF)
...

Hier fügst du "Test" ein ("Test" hat 4 zeichen)
Zitat:

...
Zeile3(CR/LF)
Testile5(CR/LF)
...

Du hast den zeilenumbruch (CR/LF = 2 zeichen) mit "Te" überschrieben, und dann die ersten 2 von "Zeile" mit "st".

Du kannst das nur so machen, das du die Datei komplett, oder bis zu dem Wort neu schreibst.

Das ist leider technisch auch nicht anders möglich, da die verteilung der Daten auf der Festplatte in Blöcke unterteilt ist, welche untereinander nacheinander den nächsten Block markieren. Die daten in den Blöcken müsste damit verschoben werden. (was machbar ist, aber sicher nicht sinnvoll, wenn es kleine Datein sind) bei grösseren Datei spart man sich Speicherplatz, durch das verschieben, allerdings dauert es lange.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 23.02.2007, 13:08    Titel: Antworten mit Zitat

[Hintergrundinfo-Korrektur]
CR steht nicht für Char Returne sondern für Carriage Return.
[/Hintergrundinfo-Korrektur]
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 23.02.2007, 16:21    Titel: Antworten mit Zitat

danke, wusste nur grad nicht, wie man das schreibt durchgeknallt
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4702
Wohnort: ~/

BeitragVerfasst am: 23.02.2007, 17:54    Titel: Antworten mit Zitat

Alternativ müsste man doch auch eine feste Länge pro Zeile festlegen können. Ist der Eintrag zu kurz, wird z. B. mit Leerzeichen aufgefüllt. Zugriff erfolgt dann über OPEN Dateiname FOR RANDOM. Nachteil ist natürlich, dass die Datei damit (u. U. wesentlich) größer wird, und dass die Größe eines einzelnen Eintrags beschränkt ist.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Meteorus



Anmeldungsdatum: 03.02.2007
Beiträge: 405

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

nemored hat Folgendes geschrieben:
Alternativ müsste man doch auch eine feste Länge pro Zeile festlegen können. Ist der Eintrag zu kurz, wird z. B. mit Leerzeichen aufgefüllt. Zugriff erfolgt dann über OPEN Dateiname FOR RANDOM. Nachteil ist natürlich, dass die Datei damit (u. U. wesentlich) größer wird, und dass die Größe eines einzelnen Eintrags beschränkt ist.


Die größe einer Datei Spielt für mich keine große Rolle. Könntest du mir ein Beispiel geben wie man sowas genau schreiben könnte?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 24.02.2007, 15:43    Titel: Antworten mit Zitat

Warum schreibst die Datei nicht einfach neu?


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 24.02.2007, 18:25    Titel: Antworten mit Zitat

Wie jetz, du meinst:
-Datei komplett einlesen
-Notwendige Änderungen vornehmen
-Datei wieder speichern
-(ggfs. das Array wieder löschen, um Speicher freizukriegen)
?
Echt? Sowas geht ? lachen
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4702
Wohnort: ~/

BeitragVerfasst am: 24.02.2007, 19:28    Titel: Antworten mit Zitat

Ich gehe mal davon aus, dass öfters eine Zeile überschrieben werden muss. zwinkern

Mal so trocken vor mich hinprogrammiert:
Code:
SUB lese(zeile)
  DIM text AS STRING * 50   ' Die 50 gibt die maximale Zeilenlaenge an
  OPEN "Dateiname" FOR RANDOM AS #1 LEN=50
  GET #1, zeile, text
  CLOSE #1
END SUB

SUB schreibe(zeile, text AS STRING * 50)
  OPEN "Dateiname" FOR RANDOM AS #1 LEN=50
  PUT #1, zeile, text
  CLOSE #1
END SUB

Jeder Eintrag in der Datei muss jetzt genau 50 Zeichen betragen.

Ich habe damit noch nicht gearbeitet, deswegen keine Garantie auf Funktionsfähigkeit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht 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