Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » [vc++] String aufsplitten ???

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 ] > 2 < [ 3 ]
010
13.09.2003, 08:43 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hat nichts mehr mit ansi zu tun
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
13.09.2003, 11:57 Uhr
0xdeadbeef
Gott
(Operator)


Ums nach ANSI zu bringen:

C++:
#include <string>
#include <fstream>
#include <map>

class Config
{
public:
    void readconfig(std::string filename);

private:
    std::map<std::string, std::string> data;
};

void Config::readconfig(std::string filename)
{
    std::string line, key, value;
    std::ifstream in(filename.c_str());

    while(in)
    {
      in >> key >> value;
      data[key] = value;
    }

    in.close();
}

int main()
{
    std::string datei = "test.cfg";
    Config conf1;
    conf1.readconfig(datei);
    return 0;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
13.09.2003, 12:09 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Wenn er eh MFC benutzt kann er gleich wie ich schon sagte

AfxExtractSubString

benutzen
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
13.09.2003, 12:15 Uhr
0xdeadbeef
Gott
(Operator)


Ja, juhu. Wenn ich in die Achtziger zurück will, fange ich auch wieder an, Strings mit Funktionen auseinanderzunehmen. Wofür gibts denn OOP und die STL?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
15.09.2003, 17:51 Uhr
~Luke
Gast


Ihr seit gut... ich versteh doch nur Bahnhof, die funktion AfxExtractSubString weis ich nicht anzuwenden, ich nehme deshalb strings mit funktionen auseinander, sei es so alt wie es will, ich weis nun mal nicht wie ichs anders machen soll.

Das funktioniert wenigstens, das einziege problem was ich habe ist wenn die Configdatei eine Leerzeile hat:
Dann bekomme ich in der Debug version eine Fehlermeldung

Code:
Debug Assertion Falied!
Programm: .../.../.../readconfig.exe
File: Afx.inl
Line: 170

For information in how your programm can cause an assertion
failture, see the Visual C++ documentation on asserts



In der Dokumentation finde ich dazu nichts (im netz auch nicht, weis ja nicht mal was das ist ), in der Relase-Version habe ich den Fehler nicht.

@0xdeadbeef: Hört sich sehr interessant an, versteh ich zwar nicht 100%, aber es läuft auch nicht... war schon gut das der Tread hierher verschoben wurde, ich arbeite mit MS VC++ 6.0.
Da gibt es keine Headerdatei "map"

--edit: Tags richtiggestellt

Dieser Post wurde am 15.09.2003 um 17:58 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
15.09.2003, 17:59 Uhr
0xdeadbeef
Gott
(Operator)


Natürlich gibt es da ne Header-Datei map. *sarkasmus an* Soviel C++ kann sogar Visual C++ noch. *sarkasmus aus*

Dass eine Debug-Assertion in der Release-Version nicht bemängelt wird, ist klar. Trotzdem würde ich versuchen, sie los zu werden, sonst kriegst du nachher ziemlich böse Heisenbugs.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
15.09.2003, 19:33 Uhr
Luke



Naja...
Mein Suchergebnis und mein Compiller ist da anderer Meinung...

Code:
fatal error C1083: Cannot open include file: 'map.h': No such file or directory

Vielleicht heist die ja anders, hab schon ma n paar versucht, ging aber nit.

Klar will ich diesen Assertion Fehler beheben, dafür müsste ich aber erst mal wissen was das ist bevor ich da irgendwie herausfinden kann wie ich das lösen kann... hat da jemand vielleicht n Link?

Dieser Post wurde am 15.09.2003 um 19:36 Uhr von Luke editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
15.09.2003, 21:58 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
ist auch nicht mit einem .h versehen
"X:\Microsoft Visual Studio\VC98\Include"
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
16.09.2003, 12:08 Uhr
Luke



Ubs... sowas gibts auch?
Wo wir gerade beim Einbinden der Headerdateien sind...
Wo ist der unterschied zwischen
#include "headerdatei.h"
und
#include <headerdatei>
?

Je nach dem welche version ich schreibe habe ich 134 Warnings oder 7 errors beim kompillieren.
Einer ist z.B.

Code:
error C2039: 'string' : is not a member of 'std'

oder

Code:
error C2955: 'map' : use of class template requires template argument list


Außerdem funced das mit dem Kompillieren sowieso nur mit
#include "stdafx.h"
in der ersten Zeile.

PS: Das mit dem Assertion Fehler hab ich jetzt gefixed!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
16.09.2003, 13:33 Uhr
0xdeadbeef
Gott
(Operator)


Es sind zwei Unterschiede. Der eine ist, dass durch das .h am Ende der Dateiname geändert wird, der Präprozessor also eine andere Datei sucht. Es ist prinzipiell zum Beispiel auch möglich, folgendes zu schreiben:

C++:
//stubs.cpp

void do_something()
{
#include "impl.cpp"
}


Der Inhalt von impl.cpp wird dann wortwörtlich an der Stelle, an der die Include-Direktive steht, eingefügt. (Sowas ist aber nur äußerst selten ratsam, also lass das besser sein). Das andere ist, dass je nachdem, ob du "" oder <> benutzt, andere include-Pfade durchsucht werden.

C++:
#include "foo.h"


heißt soviel wie "hier liegt eine datei foo.h. Schreib sie hier hin". Dagegen heißt

C++:
#include <foo.h>


soviel wie "irgendwo im voreingestellten Include-Pfad liegt eine Datei foo.h. Nimm die erste, die du findest, und schreib sie hier hin." Welche Pfade er durchsucht, kannst du bei Visual C++ unter Tools->Options->Directories (wahrscheinlich Extras->Optionen->Verzeichnisse oder so auf Deutsch) einstellen.

Was die C++-Standard-Header angeht - vor einiger Zeit wurde ein neuer C++-Standard eingefügt. Die ganzen Dinger mit .h am Ende (iostream.h, algo.h...), in ihnen wird automatisch der namespace std benutzt. Deswegen ist der Code

C++:
#include <iostream.h>
int main() { cout << "Hello, World!" << endl; }


im alten Standard auch legal. Der neue Standard läßt das .h weg (wohl auch, um Konsistenz mit Sonderfällen wie <string> zu schaffen - string.h gibts ja schon als C-Header) und verlangt, dass man den Namespace explizit angibt. Da sieht der Code dann so aus:

C++:
#include <iostream>
int main() { std::cout << "Hello, World!" << std::endl; }


oder wahlweise

C++:
#include <iostream>
using namespace std; //namespace std benutzen
int main() { cout << "Hello, World!" << endl; }


Ich vermute, dass deine Fehler damit zusammenhängen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 16.09.2003 um 13:39 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ VC++ / MFC ]  


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: