Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Wie kann ich in C(++) Zeichen als Zahlen inteprätieren?

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
23.02.2005, 19:05 Uhr
~ch
Gast


Ich habe eine datei von folgendem format:

Code:
-0.456;0.666;0.876;
0.999;-0.782;...;
...;...;...;



Diese öffne ich und will sie auslesen. wie kann ich das aber in einer int/flout/double-variable speichern?? Unter vb gabs da irgendwie AscW oder so...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.02.2005, 19:40 Uhr
Pler
Einer von Vielen
(Operator)


ich standart c denke ich es muesste folgendermassen klappen:

fscanf( filepointer , "%lg;%lg;%lg;\n%lg; <und so weiter>" , d1,d2,d3,...,dn );

muesste sich auch in einer schleife machen lassen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.02.2005, 19:54 Uhr
~ch
Gast


Warum "%lg"?
müsste es nicht eher %d heißen??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.02.2005, 20:32 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


oder mal fgets und strtok anschauen...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.02.2005, 22:54 Uhr
0xdeadbeef
Gott
(Operator)


%lg liest doubles, %d ints. Du hast doubles.

In C++ sähe das wohl allerdings eher so aus:

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

int main(int argc, char *argv[]) {
  std::vector<std::vector<double> > matrix;
  std::string zeile;
  std::ifstream in(argv[1]);
  std::stringstream sstr;

  while(std::getline(in, zeile)) {
    matrix.push_back(std::vector<double>());
    sstr.clear();
    sstr.str(zeile);
    while(true) {
      char c;
      double d;
      if(!(sstr >> d >> c))
        break;
      matrix.rbegin()->push_back(d);
    }
  }

  for(std::vector<std::vector<double> >::iterator i = matrix.begin();
      i != matrix.end();
      ++i) {
    std::copy(i->begin(), i->end(), std::ostream_iterator<double>(std::cout, " "));
    std::cout << std::endl;
  }
}


Ist nur grad so zusammengeschustert, aber das Prinzip sollte klar werden. Lass es mal über diese Datei laufen:

Code:
1.23;3.14;5.87;9.12;
1.23;5.12;

4.56;-1.45;3.14;


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

Dieser Post wurde am 23.02.2005 um 22:54 Uhr von 0xdeadbeef editiert.
 
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: