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

Anmeldungsdatum: 03.02.2007 Beiträge: 405
|
Verfasst am: 23.02.2007, 00:44 Titel: Zeilen in Datei |
|
|
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 |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 23.02.2007, 01:33 Titel: |
|
|
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 |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 23.02.2007, 13:08 Titel: |
|
|
[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 |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 23.02.2007, 16:21 Titel: |
|
|
danke, wusste nur grad nicht, wie man das schreibt  _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 23.02.2007, 17:54 Titel: |
|
|
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 |
|
 |
Meteorus

Anmeldungsdatum: 03.02.2007 Beiträge: 405
|
Verfasst am: 24.02.2007, 15:40 Titel: |
|
|
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 |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 24.02.2007, 15:43 Titel: |
|
|
Warum schreibst die Datei nicht einfach neu?
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 24.02.2007, 18:25 Titel: |
|
|
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 ?
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 24.02.2007, 19:28 Titel: |
|
|
Ich gehe mal davon aus, dass öfters eine Zeile überschrieben werden muss.
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 |
|
 |
|