Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Lesen bestimmter Textstellen

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 ]
000
17.05.2004, 07:38 Uhr
~Sylvester
Gast


Hallo Programmierer (und innen ),
ich hätte da mal wieder ein Problem.
Es geht um die Programminterne Kommunikation zwischen einem C-Programm und MS Access. Da Access nur Textdateien folgender Art liefert:

Code:
------------------------------------------------------------------
|    Anzahl der Messungen     |  Zahl  |   Auswahl der Einheit   |
------------------------------------------------------------------
|                           1 |      1 | min                     |
------------------------------------------------------------------


würde ich gerne die "1" für Anzahl der Messungen, die "1" führ die Zahl und die
Auswahl der Einheiten heraustrennen und in drei verschiedene Variablen packen. Wie realisiere ich das? Mit ifstream?

Sylvester
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.05.2004, 07:44 Uhr
~Sylvester
Gast


Übrigens arbeite ich mit C++.
(Borland Compiler)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.05.2004, 08:38 Uhr
(un)wissender
Niveauwart


Mit getline liest du immer eine Zeile, die erste verwirfst du, es sind ja nur die einheiten. Dann kannst du die gelesene Zeile in einen stringstream einlesen, und der formatiert dir die Einheiten. Wenn du eine Klassen als Datenstruktur machen und operator << überladst, kann du das dann einfach aus dem stringstrem in einem rutsch auslesen.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.05.2004, 08:56 Uhr
~Sylvester
Gast


Hmmm...
Gehts auch auf Deutsch?
Ich meine, danke für die Antwort, aber... ARGH...
Me=N00b.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.05.2004, 09:14 Uhr
~Sylvester
Gast


Es geht mir auch wirklich NUR um die Zahlen.
Der Name der Variablen ist nicht aus der Bezeichnung zu entnehmen.
So dass ich nachher also:

MessAnzahl = 1
MessZahl = 1
MessEinheit = "min"

habe.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.05.2004, 09:17 Uhr
Pablo
Supertux
(Operator)


Wenn das Format bekannt ist, dann benutze sprintf bzw. fprintf
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
17.05.2004, 10:52 Uhr
virtual
Sexiest Bit alive
(Operator)


@Sylvester
Du solltest Dir erstmal eine grobe Vorgehensweise überlegen, etwa so:
[code]
Für die gesamte Datei tue
Lese eine Zeile
Für jede zeile tue
Benutze strtok o.ä, um die Zeile grob in ihre Felder zu unterteilen
Für jedes Feld tue
Entferne führende und anhängende Leerzeichen
Konvertiere das Feld (welches ja string ist) in den gewünschten Typ:
a) String ->String: strcpy
b) String -> int: atoi
c) String -> float: atof
Speicher den Wert in eine Variable
end-tue Feld
end-tue Zeile
end-tue Datei
[/cpp]
Und dann von top nach down vorgehen:
Erstmal rausfinden, wie man zeilenweise liest (Hängt von der Sprache C oder C++ ab) und dann schrittweise verfeinert.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
17.05.2004, 12:07 Uhr
~Sylvester
Gast


Das klingt alles nach flexiblen Möglichkeiten, wie ich umgehen sollte, wenn die Variablen immer an anderen Stellen sind, oder sich die Datei in ihrer Grundstruktur ändert.
Aber es muß doch ne' Möglichkeit geben, die Variablen aus dem Text zu lösen, wenn man weiß das sie immer an der gleichen Stelle stehen, oder?
Die Datei ändert sich (bis auf die Werte) niemals.
Ich weiß nicht... Mit diesen Befehlen (strtok, atoi) haben wir noch nie gearbeitet...
Ich mein, wenns nicht leichter geht, muss ich mich halt mal damit schlagen, aber ich kanns mir eigentlich nicht vorstellen...

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
17.05.2004, 12:21 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


es geht nicht leichter
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
17.05.2004, 15:09 Uhr
(un)wissender
Niveauwart


War vielleicht etwas abstrakt, darum hier mal ein Beispiel, wie ich es gemeint habe.
Wenn du jetzt z.B. "3 4 min" eingibst wird das eingelesen und in Data gespeichert, du hast also jetzt die Werte.


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

class Data;

std::ostream& operator<<(std::ostream &out, const Data &data);
std::istream& operator>>(std::istream &in, Data &data);

class Data
{
public:
    friend std::ostream& operator<<(std::ostream &out, const Data &data);
    friend std::istream& operator>>(std::istream &in, Data &data);

private:
    int nummmerDerMessung, zahl;
    std::string auswahlDerEinheit;
};

std::ostream& operator<<(std::ostream &out, const Data &data)
{
    static const std::string separator = " ";
    out << data.nummmerDerMessung << separator
        << data.zahl              << separator
        << data.auswahlDerEinheit << separator;
    return out;
}

std::istream& operator>>(std::istream &in, Data &data)
{
    in >> data.nummmerDerMessung >> data.zahl >> data.auswahlDerEinheit;
    return in;
}

int main() {
    Data d;
    std::string input;
    std::stringstream formater;
    getline(std::cin, input); //Einlesen
    formater << input; //Formatieren
    formater >> d; //In Datenstruktur schreiben
    std::cout << d; //zum test ausgeben.
   return 0;
}




Bearbeitung:

Ersetzt du std::cin durch eine std::ifstream und packst das ganze in eine Schleife, und legst ein Feld von Data an, dann hast du es schon.


--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 17.05.2004 um 15:10 Uhr von (un)wissender editiert.
 
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: