Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zahl aus einer Datei auslesen ?

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.07.2004, 14:58 Uhr
~redblub
Gast


Hi,

Also ich hätte da mal eine Frage :
Mein Programm soll mit dem ifstream eine Datei öffnen und eine Zahl auslesen und diese dan beispielsweise mit 5 addieren.
Die Datei (beispiel) :
-----
Zahl 1:
5
-----
ich will die Zahl auslesen und als ganz normale Integer zahl verwenden wie stelle ich das an ?

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.07.2004, 15:06 Uhr
t10ottoo




C++:
int zahl;
string leere_zeile;
ifstream datei;
datei.open(dateiname.txt,ios::in);

if(datei)
{
     getline(datei,leere_zeile);
     datei >> zahl;
}



Den Code hab ich schnell ausm Kopf geschrieben, also können nen paar Fehler enthalten sein

Kannst ja nochmal nachfragen, wenn was unklar ist.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.07.2004, 16:42 Uhr
0xdeadbeef
Gott
(Operator)


Was nimmst du so ein kompliziertes Dateiformat? Da musste ja nachher wieder fummelparsen oder mit nem parser generator ran. Dieses Programm hier liest die Zahlen aus einer entsprechend geformten Datei in einen std::vector<int> ein und benutzt dafür boost::spirit.

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

#include "boost/spirit/core.hpp"

using namespace boost::spirit;

int main(int argc, char *argv[]) {
  std::string fcnt;
  std::ifstream fin;
  std::vector<int> v;
  char c;

  if(argc < 2) {
    std::cout << "Dateiname angeben!" << std::endl;
    return 3;
  }

  fin.open(argv[1]);
  if(fin) {
    while((c = fin.get()) != EOF)
      fcnt += c;

    if(parse(fcnt.c_str(),
         *(str_p("-----") >>
           "Zahl" >> int_p >> ':' >> int_p[push_back_a(v)]) >>
         "-----",
         space_p).full) {
      // Hier kann man dann mit dem vector arbeiten. In diesem Fall gebe
      // ich die Zahlen einfach wieder aus.
      std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
      std::cout << std::endl;
    } else {
      std::cout << "Datei passt nicht auf das vorgegebene Format." << std::endl;
      return 2;
    }    
  } else {
    std::cout << "Konnte Datei nicht öffnen." << std::endl;
    return 1;
  }
  return 0;
}


Wenn du das Dateiformat vereinfachst, kommst du auch einfacher dabei weg - in diesem Fall würde ich die Zahlen einfach hintereinander weg schreiben, dann kannst dus so machen:

C++:
std::ifstream fin("dateiname");
for(std::istream_iterator<int> i(fin); i != std::istream_iterator<int>(); ++i) {
  int zahl = *i;
  //...weiter machen...
}


oder auch, für den Anfang wahrscheinlich einfacher:

C++:
while(fin) {
  int zahl;
  fin >> zahl;

  //...weiter machen...
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 04.07.2004 um 16:48 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.07.2004, 12:59 Uhr
~redblub
Gast


vielen dank
 
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: