File Frage

Für allgemeine Fragen zur Programmierung mit PureBasic.
DarkSaga
Beiträge: 5
Registriert: 08.11.2004 18:18

File Frage

Beitrag von DarkSaga »

Hi All!
Hab ne kleine Frage zum Thema File (ist bestimmt voll easy zu lösen bin aber leider nicht drauf gekommen ~.~):
Also ich habe ein Datei mit OpenFile() und WriteSringN() erstellt. Nun möchte ich das beim lesen dieser Datei die 2. Zeile dann die 3. und dann die erste Zeile gelesen wird. Kann ich das mit einem einfachen Befehl sagen??
Danke jetztschonma!!
Benutzeravatar
sharkpeter
Beiträge: 474
Registriert: 29.08.2004 16:18
Wohnort: Dresden
Kontaktdaten:

Beitrag von sharkpeter »

Hallo DarkSaga,

lies den Inhalt doch in ein dimensioniertes Feld ein, sofern du die Anzahl der Einträge kennst:

Code: Alles auswählen

Dim irgendwas.s(xyz)
a=0
If ReadFile(1,name)
  Repeat
    irgendwas(a)=ReadString()
    a=a+1
  Until Eof(1)
  CoseFile(1)
EndIf
Dann kennst du ja den Ort des jeweiligen Inhaltes.

Oder wenn du die Anzahl nicht kennst, machst du es halt über LinkedList

Code: Alles auswählen

NewList irgendwas.s()

If ReadFile(1,name)
  Repeat
    AddElement(irgendwas())
    irgendwas=ReadString()
  Until Eof(1)
  CoseFile(1)
EndIf

_Anzahl=CountList(irgendwas())
ResetList(irgendwas())

For a = 1 to _Anzahl 
  NextElement(irgendwas())
  Debug irgendwas()
next a
Gruß Jens
PB3.94 bis 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Eine Zeile in Windows endet immer mit den ASCII-Zeichen 13 und 10. Also kannst du nun so weit in der Datei vorspringen, bis du beim 2ten Mal Auftauchen dieser Zeichen bist, also kurz vorm Sprung in die 3te Zeile. Dann noch die Positon um 2 erhöhn (da ja noch diese 2 Zeichen da stehen) und dann kannst du die 3te Zeile auslesen. Mit Findstring() kann man danach suchen. ;)

Andere Möglichkeit wäre, 2 mal "leer" auszulesen, und den dritten Wert zu speichern.
ALso so:

Code: Alles auswählen

;datei öffnen...
readstring()
readstring()
inhalt$ = readstring()
Das heißt dann, er ließt 3 Zeilen aus, aber nur die 3te merkt er sich. Ist natürlich unnötiges Auslesen der 2 Zeilen welche wir nicht brauchen, aber möglicherweise schneller als nach dem Zeilenumbruch zu suchen und sich genau die gesuchte Zeile zu suchen (und auf jeden Fall einfacher). ;)
Dann könntest du per fileseek(0) an den Anfang der Datei kehren und wieder die gewünschten Zeilen lesen. Also dann eine leer und die nächste richtig, dann hast du die 2te Zeile. Dann wieder zurück und die erste Zeile auslesen, dann hast du erst die 3te, dann die 2te und dann die 1te. Die Reihnfolge kannst du dir natürlich beliebig aussuchen. ;)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Das Versteh ich nicht (diesen Aufwand). Es ist doch egal in welcher Reihenfolge ich die drei Zeilen auslese. Bearbeiten kann ich sie doch hinterher in einer anderen Reihenfolge!

@Sunny
Textzeilen enden nicht immer mit Zeilenvorschub und Wagenrücklauf. Nur unter Windows werden m e i s t beide verwendet.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

das ist eine findige lösung, sunny. :allright:

allerdings würde ich persönlich die lösung mit der linked list von sharkpeter vorziehen,
das ist weniger hin- und her- gelese. :wink:

[edit]@ts-soft: sunny hat doch nur genau auf die frage geantwortet...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Beitrag von Rings »

die FastFileText - Library wäre hier sicherlich von Vorteil .
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
sharkpeter
Beiträge: 474
Registriert: 29.08.2004 16:18
Wohnort: Dresden
Kontaktdaten:

Beitrag von sharkpeter »

@ts-soft,

klar ist es egal, ich würde auch immer erst alles auslesen und dann so anordnen wie ich es brauche, aber das war ja nicht die Frage.

Gruß Jens
PB3.94 bis 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

@Sharkpeter

Ich wollte ja auch nur erreichen, das er seine Logik noch einmal durchdenkt :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

ts-soft hat geschrieben:Das Versteh ich nicht (diesen Aufwand). Es ist doch egal in welcher Reihenfolge ich die drei Zeilen auslese. Bearbeiten kann ich sie doch hinterher in einer anderen Reihenfolge!

@Sunny
Textzeilen enden nicht immer mit Zeilenvorschub und Wagenrücklauf. Nur unter Windows werden m e i s t beide verwendet.
Ich hab doch geschrieben dass es sich auf Windows bezieht. Ich weiß dass es unter Linux oder Mac anders aussieht. :wink:
lies den Inhalt doch in ein dimensioniertes Feld ein, sofern du die Anzahl der Einträge kennst:
Und die kannst du herausfinden indem du nach der Anzahl der enthaltenen chr(13)+chr(10) suchst (+1 zur Menge hinzuaddieren, denn meist wird am Ende des ganzen Textes ja Zeilenumbruch mehr gemacht)
Zuletzt geändert von Ynnus am 21.11.2004 14:56, insgesamt 1-mal geändert.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Rings hat geschrieben:die FastFileText - Library wäre hier sicherlich von Vorteil .
Jap, da haste wohl recht.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten