Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Trennzeichen für eine Liste (in einer txt-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 ] > 2 <
010
30.11.2009, 14:48 Uhr
~cppbeginner
Gast


Danke für Eure Mühe!!

Momentan sieht meine Methode zum Auslesen der Felder in der Tabelle wie folgt aus.
Wäre gut wenn ich diese Weiterverwenden könnte und nur die Trennzeichen *, $, | ersetzen könnte.
So dass ich die Vektor- und String-Funktionen immernoch verwenden kann.

Tabellen-Struktur:
wert1$wert2|wert3*schluessel



C++:
string buffer;
vector< std::string > lines;


ifstream in(listname);
if(!in)
{
    cout << "error: no list" << endl;
}


while (std::getline(in, buffer))
{
        lines.push_back(buffer);
}


buffer = elem;                //nach diesem Element wird in der liste Zeile fuer Zeile gesucht
buffer = "*" + buffer;            //Beispiel: *schluessel
    
for(i=0; i < lines.size(); i++)
{
    //Wenn das Element in der Zeile gefunden wurde, schneide ich das dazugehörige Attribute
    //aus dem Stringbuffer heraus siehe substr()
    if(lines[i].find(buffer, 0) != -1)    
    {
        buffer = lines[i];
        buffer = buffer.substr( buffer.find("$", 0)+1, (buffer.find("|", 0) - buffer.find("$", 0))-1 );
        break;
    }
};

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
30.11.2009, 15:50 Uhr
mmc20
puss in boots


hi,
wenn schon keine datenbank, warum dann nicht in ein xml-file, da gibts fertige klassen für (schreiben und lesen), und manuell lesbar sind die auch gut.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
30.11.2009, 16:40 Uhr
0xdeadbeef
Gott
(Operator)


Ohne XML jetzt ein schlechtes Format nennen zu wollen, Platzmangel lässt sich dadurch gerade nicht beheben.

Was die Parserei angeht, dir ist bewusst, dass std::getline einen dritten Parameter (das Trennzeichen) entgegennimmt, und dass das in Verbindung mit istringstream solche Auseinanderpfriemeleien sehr viel einfacher macht?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
30.11.2009, 17:30 Uhr
~cppbeginner
Gast


@mmc20:
Fertige XML-Funktionen klingt gut, welche Funktionen zum
Lesen bzw. Schreiben schweben dir da vor?


@0xdeadbeef
Das Trennzeichen ist darin, um das zu suchende Element
eindeutig zu machen.

Beispiel:
name1$wert02*01
name2$wert2*02

02 kommt in Zeile 1 vor, *02 nur in Zeile 2
(Aber da * in den Elementen allgemein vorkommt, ist *02 auch nicht mehr eindeutig genug)

Kannst du mir ein kleines istringstream-Beispiel posten,
das dieses Problem umgeht? Wäre nett
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
30.11.2009, 18:06 Uhr
0xdeadbeef
Gott
(Operator)


Beispielsweise

C++:
#include <sstream>
#include <string>

// ...

std::istringstream parser("name1$wert02*01");
std::string token[3];

std::getline(parser, token[0], '$');
std::getline(parser, token[1], '*');
std::getline(parser, token[2]);


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
01.12.2009, 19:34 Uhr
~cppbeginner
Gast


Das sieht sehr sehr gut aus! Vielen Dank!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ 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: