Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem beim einlesen meiner Datei

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
04.12.2003, 16:03 Uhr
~Stefan
Gast



C++:
FILE *datei;
int c;

do
{
   c = fgetc(datei);
}
while (c != ",");



Meine Textdatei sieht folgendermaßen aus:

text1,text2,text3

Ich will nun nur text1 einlesen und diesen dann in einer Variablen speichern, danach text2 und diesen in einer neuen Variablen speichern. Ist das möglich, wenn ja wie?
Ich bin nicht so gut in c bitte daher wenn möglich um eine einfache Lösung, danke.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.12.2003, 17:04 Uhr
0xdeadbeef
Gott
(Operator)



C++:
FILE *datei;
char buf1[100], buf2[100], buf3[100];
/*...*/
fscanf(datei, "%s,%s,%s", buf1, buf2, buf3);


müsste gehen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.12.2003, 00:05 Uhr
~Stefan
Gast


Danke.

Jetzt hab ich noch ne Frage, bei Zahlen war das kein Problem.

int zahlen[30];

dann hatte ich nur eine variable für die 30 zahlen in der datei.

kann ich auch platzsparend mit den char variablen umgehen? Wenn ich jetzt zwanzig Kommagetrennte texte habe, dann wird die liste der variablen sehr lang, vorallem muss ich die in der funktion weitergeben, sehr viel platz was da anfallen würde.

hab mal was von struct gehört, wär das in so einem fall nützlich?

fazit, ich will eine variable für 20 kommagetrennte texte, jeder einzeln ansprechbar.

hoffe verstanden worden zu sein. :o)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.12.2003, 00:19 Uhr
derphilipder



Ein struct ist "nur" eine Zusammenfassung von Daten, die zusammengehören, zu einem eigenen Datentyp, da kommt sogar noch ein wenig Speicherbadarf dazu.
Ein char ist so lang, wie es ist...

Ich würde mit string arbeiten und beim übergeben stets mit pointern oder Referenzen arbeiten, damit nicht kopiert wird.
Wobei ein string ja eigentlich ein pointer ist...
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.12.2003, 00:26 Uhr
~Stefan
Gast


Uff *roffl*

Nagut. Ich nehm das mal so hin, hab keine Ahnung wie das gehen soll. Also Pointer sagt mir was kann ich denk ich mal richtig einordnen, aber sonst.

Trotzdem Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
05.12.2003, 01:23 Uhr
0xdeadbeef
Gott
(Operator)


Was geht, ist

C++:
char strings[100][30];


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
05.12.2003, 01:35 Uhr
derphilipder



Sorry...

Voraussetzung für string ist, dass Du C++ machst.

Einen string kannst Du Dir als char-Feld vorstellen.
Der Name eines Strings stellt eine pointer auf einen dynamisch verwalteten Speicherbereich mit charactern dar.

Gleichzeitig stellt ein string aber auch Methoden(Funktionen) zur Verfügung, um mit seinem Inhalt zu arbeiten, was recht komfortabel ist.
Vor allem must du Dich um die Speicherverwaltung nicht selbst kümmern.

Eine Referenz auf ein Objekt ist nichts anderes, als das Objekt selbst.

Bsp.:
void function(double x) //Parameter wir beim Übergeben kopiert
void function(double& x)//Referenz auf double - Funktion arbeitet direkt mit x

Bei der Übergabe eines Feldes an eine Funktion wird mit dem Feld selber gearbeitet, da ein pointer auf die Anfangsadresse übergeben wird.
Ein string dagegen wird bei der Übergabe kopiert.


C++:
void f(string s)
{
    s = "Hallo";
}

int main ()
{
    string str = "Du";
    f(str);
    cout << str; // Ausgabe: Du
    return 0;
}
//------------------------------------
void f(string& s)//Referenz
{
    s = "Hallo";
}

int main ()
{
    string str = "Du";
    f(str);
    cout << str;//Ausgabe: Hallo
    return 0;
}





Ich hoffe, ich hab Dich jetzt nicht noch mehr verwirrt.
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
05.12.2003, 02:37 Uhr
0xdeadbeef
Gott
(Operator)


In C++ würde ich diese spezielle Aufgabe wahrscheinlich so angehen:

C++:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <iterator>

std::ifstream &operator>>(std::ifstream &in, std::vector<std::string> &v) {
  std::string s;

  if (v.capacity() < 3) v.reserve(3);
  v.clear();

  std::getline(in, s, ','); v.push_back(s); //Die ersten beiden Teile der Zeile
  std::getline(in, s, ','); v.push_back(s); //enden auf Komma, der letzte mit einem
  std::getline(in, s     ); v.push_back(s); //Zeilenende.
}

int main() {
  std::ifstream in("datei.txt");
  std::vector<std::string> line;

  in >> line;

  std::copy(line.begin(), line.end(), std::ostream_iterator<std::string>(std::cout, "\n"));

  return 0;
}


Wenn die Anzahl der Elemente pro Zeile nicht feststeht, würde ich wahrscheinlich was ähnliches, nur mit einer Schleife und einem Stringstream basteln.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: