fstream

Tags:    c++ grafik

<< < 12 > >>
Hey nogen der eventuelt kender en funktion til bestemmelse af et positionen i input filen?

Helst bestemmelse af linjenr.

Kan godt se at mit problem er rimelig dårligt formuleret. Det jeg helst vil er at kunne læse en bestemt linje (altså et bestemt linjenr.) i en normal input fil (helst .txt) så jeg kan indlæse forskellige ord i mit program fra tekstfilen, hvor tekstfilen kunne se sådan her ud.

Ord1
ord2
ord3
ord4
ord5
...

så det fx er muligt at indlæse linje 3 (og dermed ord3) i programmet.

[Redigeret d. 18/11-03 15:06:07 af daniel]



13 svar postet i denne tråd vises herunder
4 indlæg har modtaget i alt 8 karma
Sorter efter stemmer Sorter efter dato
Problemet med filer er at styre hvor du er i filen.
Når du åbner din fil, så bliver der sat en pointer til starten af filen.
Og det nok for lidt mere øvede (ikke ment fornærmende) at manipulere den filpointer selv.

Så jeg ville da anbefale dig at gennemløbe hele din fil, lægge hver linie i et string array og så bare manipulere dit string array istedet.

Her er et eksempel:
<pre>
#include <iostream>
#include <string>
#include <fstream>
#include <stdlib>

using namespace std;
const int MAXLINIER = 200; //Max linier sat til 200
int main(int argc, char* argv[])
{

string ord[MAXLINIER];
fstream infile;
infile.open("helst.txt");
if(infile.fail()){
cout << "Fejl i åbning af fil, programmet lukkes\\n";
exit(1);
}

int taeller=0;
string readahead;
infile >> readahead;
ord[taeller]= readahead;
while((!infile.eof()) && (taeller < MAXLINIER-1)){
taeller++;
infile >> readahead;
ord[taeller]= readahead;
}
infile.close();
cout << "Linie 3 = " << ord[2]; //arrays startet i 0 derfor linie 3 = ord[2]
system("PAUSE");
return 0;
}
</pre>

Jeg har sat MAXLINIER = 200; dvs arrayet kan holde 200 strenge (fra 0 til 199).
Hvis du har flere linier ændrer du det bare der.

Håber det kan bruges.
//Agge



[Redigeret d. 19/11-03 16:00:42 af Agge Kempff]



Hey nogen, der ved eventuelt kender en funktion til bestemmelse af et positionen i input filen?

Helst bestemmelse af linjenr.



Hej

Hvad er input filen???

Hilsen Thomas Vanting



Hay
Prøv
http://www.eksperten.dk/spm/249559
eller
http://www.udvikleren.dk/thread.php?f=1&t=227
http://www.iu.hio.no/~ulfu/AlgDat/eksamen/SO131Axv97.cpp

Du kan måske bruge koden
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>

int main () {
char buffer[256];
ifstream examplefile ("fil.txt");
if (! examplefile.is_open())
{
cout << "Kunne ikke åpne fila";
exit (1);
}

while (! examplefile.eof() )
{
examplefile.getline (buffer,100);
cout << buffer << endl;
}
return 0;
}

Ellers skriv lige lidt mere om problemmet...

Janus S. Andersen

* Life is a dream in a programmers heaven *



Problemet med filer er at styre hvor du er i filen.
Når du åbner din fil, så bliver der sat en pointer til starten af filen.
Og det nok for lidt mere øvede (ikke ment fornærmende) at manipulere den filpointer selv.

Så jeg ville da anbefale dig at gennemløbe hele din fil, lægge hver linie i et string array og så bare manipulere dit string array istedet.

Her er et eksempel:
<pre>
#include <iostream>
#include <string>
#include <fstream>
#include <stdlib>

using namespace std;
const int MAXLINIER = 200; //Max linier sat til 200
int main(int argc, char* argv[])
{

string ord[MAXLINIER];
fstream infile;
infile.open("helst.txt");
if(infile.fail()){
cout << "Fejl i åbning af fil, programmet lukkes\\n";
exit(1);
}

int taeller=0;
string readahead;
infile >> readahead;
ord[taeller]= readahead;
while((!infile.eof()) && (taeller < MAXLINIER-1)){
taeller++;
infile >> readahead;
ord[taeller]= readahead;
}
infile.close();
cout << "Linie 3 = " << ord[2]; //arrays startet i 0 derfor linie 3 = ord[2]
system("PAUSE");
return 0;
}
</pre>

Jeg har sat MAXLINIER = 200; dvs arrayet kan holde 200 strenge (fra 0 til 199).
Hvis du har flere linier ændrer du det bare der.

Håber det kan bruges.
//Agge



[Redigeret d. 19/11-03 16:00:42 af Agge Kempff]



Nu ved jeg ikke som meget om læsning og skrivning til og fra filer (endnu), men kunne man ikke bare lave en string variabel for hver linie og så via en cin command åbne den string/linie som man vil læse?

Det vil måske ikke være så smart hvis der f.eks. er 500 linier, men hvis der kun er et par stykker ville det da måske være den nemmeste?



Hay
Prøv
http://www.eksperten.dk/spm/249559
eller
http://www.udvikleren.dk/thread.php?f=1&t=227
http://www.iu.hio.no/~ulfu/AlgDat/eksamen/SO131Axv97.cpp

Du kan måske bruge koden
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>

int main () {
char buffer[256];
ifstream examplefile ("fil.txt");
if (! examplefile.is_open())
{
cout << "Kunne ikke åpne fila";
exit (1);
}

while (! examplefile.eof() )
{
examplefile.getline (buffer,100);
cout << buffer << endl;
}
return 0;
}

Ellers skriv lige lidt mere om problemmet...

Janus S. Andersen

* Life is a dream in a programmers heaven *

DANIEL

Har ikke prøvet det, men tror ikke at det løser mit problem.



Ok.
Hvis du skal arbejde med filer syntes jeg det nemmeste er at arbejde med streams. HAr bruger du blot << eller >> til at læse eller skrive til en fil.

Håber du får løst dit problem, ellers skal jeg no se på det på et tidspunkt.

Mvh
Janus S. Andersen




Jeg er ikke helt sikker på hvad det er du mener.
For mit eksempel tager jo en linie (der er kun 1 ord på hver linie) og lægger det i et array.
Hvis du mener at man skal åbne filen hver gang, gennemløbe filen til man når den linie der skal hentes, hente den, lukke filen og starte forfra, så vil den løsning koste meget i tid, da det er relativt langsomt at åbne filer.





Jeg er ikke helt sikker på hvad det er du mener.
For mit eksempel tager jo en linie (der er kun 1 ord på hver linie) og lægger det i et array.
Hvis du mener at man skal åbne filen hver gang, gennemløbe filen til man når den linie der skal hentes, hente den, lukke filen og starte forfra, så vil den løsning koste meget i tid, da det er relativt langsomt at åbne filer.




Kan man ikke nøjes med at åbne filen én gang og så nøjes med at læse en linie af gangen, og så lægge hver linie ind i en variabel, som man så kan læse?



Jeg tror ikke jeg forstår hvad du mener. Det er jo det jeg g ør i eksemplet?



Jeps.......skulle også bare have tid til at teste det. Du får dine point! Bare rolig.......og undskyld jeg var så lang tid om det.
DANIEL



<< < 12 > >>
t