Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

ähM_key

Frischling

  • »ähM_key« ist der Autor dieses Themas

Beiträge: 49

Beruf: Schüler

  • Private Nachricht senden

1

30.04.2005, 21:31

Problem beim Lesen aus textdatei

Hallo

ich habe ein Funktion geschrieben, um aus einer Textdatei Zeilen auszulesen.

Hier erstmal der Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <string>
using namespace std;

string get_line(int zeile)
{
    string for_in;
    int counter=0;
    char array[256];
    
    FILE    *Datei;

    Datei = fopen("Texte.txt", "r");    

    do
    {
        fgets(array, 256, Datei);
        counter++;
    }while(!feof(Datei) && counter < zeile);

    do
    {
        for_in += array[counter];
        counter++;

        if(array[counter] == '@')
            break;

    }while(counter < sizeof(array) / sizeof(char));


    return for_in;
        
}


Der Inhalt in der auszulesenden Datei sieht wie folgt aus:

Testzeile1
Testzeile2
Testzeile3
usw.

Beim aufruf der Funktion wird die auszulesende Zeile der funktion als Parameter übergeben.

Die Textausgabe sieht wie folgt aus:

Testzeile1
estzeile2
stzeile3

Bei jeder neuen Zeile wird zu beginn ein zeichen "abgehackt"...egal, ob ich bei Zeile 1 oder irgend einer anderen Beginne zu lesen.

Könnte mir evtl. jemand nen Tip geben?

MfG

2

30.04.2005, 21:50

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <string>
using namespace std;

string get_line(int zeile)
{
    string for_in;
    int counter=0;
    char array[256];
   
    FILE    *Datei;

    Datei = fopen("Texte.txt", "r");   

    do
    {
        fgets(array, 256, Datei);
        for_in += array;
    }while(!feof(Datei) && counter < zeile);




    return for_in;
       
}

ähM_key

Frischling

  • »ähM_key« ist der Autor dieses Themas

Beiträge: 49

Beruf: Schüler

  • Private Nachricht senden

3

30.04.2005, 21:58

Hallo

ja, leider liest er jetzt aber die ganze Datei auf einmal!

4

30.04.2005, 23:36

ja was denn sonst? also wenn ich deinen code
richtig verstehe versuchst du die zeilen alle in einen
string zu packe und sie durch '@' zu trennen?
(das mit den @ hab ich in meinem snipllett weggelassen.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <string>
using namespace std;

string get_line(int zeile)
{
    string for_in;
    int counter=0;
    char array[256];
   
    FILE    *Datei;

    Datei = fopen("Texte.txt", "r");   

    do
    {
        fgets(array, 256, Datei);
        counter++;
        for_in += array;
        for_in += "@";
    }while(!feof(Datei) && counter < zeile);

   

    return for_in;
       
}


wenn das nich passt musst du dein prob nochma etwas
genauer erklären

bye 23h

ähM_key

Frischling

  • »ähM_key« ist der Autor dieses Themas

Beiträge: 49

Beruf: Schüler

  • Private Nachricht senden

5

01.05.2005, 00:02

Ja, habs wohl etwas ungenau definiert. Der Funktion wird als Parameter die Nummer der Zeile übergeben welche ausgelesen werden soll. Nur diese Zeile soll ausgelesen werden. Da ich aber noch keine Möglichkeit gefunden habe, nur eine zeile zu lesen, lese ich halt ab der gewünschten Zeile und breche dann bei einem '@' ab, welches nicht mit ausgegeben werden soll.
Falls jemand noch eine ganz andere Lösung haben sollte, bloß her damit. Nicht dieses olle C. ;)

6

01.05.2005, 00:04

achso !!!

dann versuchs mal so

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <string>
using namespace std;

string get_line(int zeile)
{
    string for_in;
    int counter=0;
    char array[256];
   
    FILE    *Datei;

    Datei = fopen("Texte.txt", "r");   

    do
    {
        fgets(array, 256, Datei);
        
       if (counter == zeile){
         for_in += array;
         break;
       }
      counter++;
    }while(!feof(Datei));

   

    return for_in;
       
}

ähM_key

Frischling

  • »ähM_key« ist der Autor dieses Themas

Beiträge: 49

Beruf: Schüler

  • Private Nachricht senden

7

01.05.2005, 16:07

Danke, funktioniert!

helium

Treue Seele

Beiträge: 180

Wohnort: NRW, Burscheid (nahe Köln)

  • Private Nachricht senden

8

01.05.2005, 18:55

Aufgabe ist:

Zitat


Der Funktion wird als Parameter die Nummer der Zeile übergeben welche ausgelesen werden soll. Nur diese Zeile soll ausgelesen werden.


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <fstream>
#include <string>

string getLine (int line)
{
   ifstream file("Texte.txt")

   unsigned currentLine = 0;
   string result;

   while (getline(file, result)) {
      if (currentLine == line)
         return result;
      ++currentLine;
   }

   throw "Die Zeile gibt's gar nicht";
}

Wäre das nicht das offensichtlichste?
Why is 6 afraid of 7?
Because 7 8 9

9

01.05.2005, 18:56

[edit]vergiss es. dummer post ^^[/edit]

ähM_key

Frischling

  • »ähM_key« ist der Autor dieses Themas

Beiträge: 49

Beruf: Schüler

  • Private Nachricht senden

10

02.05.2005, 00:37

@Helium

Hatte es schonmal mit Streams versucht, war aber nicht so der hit.
Teile der Source (dieses 'throw') waren mir bis jetzt noch gar nicht bekannt. Danke.

Werbeanzeige