Aus Textdatei bestimmte Werte auslesen und als Variablen weiterverwenden
-
Morjen Allerseits !!!
Ich hab ein Problem - was sonst.
Ich möchte eine Textdatei einlesen (Das ist ja kein Problem). Diese sollte (z.B. mittels Iterator) durchlaufen werden (bekomme ich sicher mit etwas rumprobieren auch noch hin).Diese Textdatei soll eine Art Konfigurationsdatei sein mit mehreren Zeilen, welche jeweils aus einem Variablennamen, dann ein Verbindungszeichen ("=" oder ":" oder auch nur ein Freilassungszeichen) und zugehörig zum Variablennamen eine Entsprechende Zahl von Format double oder int oder sonstwas besteht.
So zum Beispiel:
Werta = 5.234
Wertb = 3.167oder so:
Werta: 5.46
Wertb: 5.788Nun möchte ich daraus Variablen mit dazugehörigem Wert machen.
Z.B. indem ich alle Werte nach dem Verbindungszeichen Zeile für Zeile in ein Array packen damit ich sie
auf diesem Wege entsprechenden Variablen zuweisen kann.
Mein Hauptproblem besteht darin wie ich die Zahlenwerte vom Rest der Textdatei trennen kann und sie dann als
Zahlenwerte und nicht als String (in einem Array) der Reienfolge nach weiterverwenden kann. (Muss wohl noch eine Konvertierung her)Ich währe für Hilfe (am besten mit ("für Blöde") erklärten Codebeispielen, da ich noch C++ Anfänger) sehr dankbar.
Wünsch euch allen einen schönen Tag,
Gruß, revolutz
-
Du solltest die Formatierung der Datei kennen, dann kannst Du entweder über char oder string Befehle die Datei auswerten.
Die frage wurde hier aber schon mehrfach geklärt, also suchen.
-
Yo !?
ähnliche Fragen wurden sicher schon oft geklärt (so Text einlesen usw)
Das Problem ist auch nicht das Format der Textdatei, da ich dieses selbst bestimmen kann. Mein Problem besteht darin, eine Abfrage zu programmieren, die mir eben nur die Zahlenwerte einzeln raussucht (z.B. mit einer Abfrage, ob sich da gerade ein "=" Zeichen befindet und wenn ja: dann nehme den Rest der Zeile (sollte ja eine Zahl sein) und konvertiere diesen String in eine double Zahl und ab damit in ein Array. Ich bin leider mit den dafür notwendigen Befehlen und Funktionen noch nicht so vertraut.
Ich werd mal morgen versuchen mir etwas Quelltext zu überlegen damit etwas klarer ist, an welcher Stelle ich Hilfe benötige.danke und bis dahin...
-
Dann versuch es doch mal mit strtok, da kannst du die Trennzeichen definieren.
-
So, is zwar noch nicht ganz das was ich haben wollte, funktioniert aber.
Mein Programm liest beliebig lange textdateien ein und schreibt die Werte in ein Array, nachdem es Zeile für Zeile ausgelesen und den jeweiligen string in eine Float-Zahl umgewandelt hat. Das schöne bei der Funktion "atof" (wandelt Sting in Float) ist, daß sie Buchstaben usw. nach dem Zahlenwert ignoriert.
Die Zeilen in der Textdatei können nun wenigstens so aussehen:5.345 (Wert A)
65875 (Wertusw.
Sollte jemand noch eine Idee haben wie man es umgedreht machen kann, also:
Wert A = 5.345
Wert B = 65875usw.
währe ich sehr dankbar.
Hier mein Quellcode:
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <string.h>using namespace std;
int main(int argc, char *argv[])
{
int i;
int linecount = 0;
char buffer[512];
double invalue[10];if (argc != 2)
{
cerr << "\nFalsche Parameterzahl\n";
exit(1);
};ifstream infile(argv[1], ios::in);
if(!infile)
{
cerr << "\nDatei konnnte nicht geladen werden.\n";
exit(2);
};while(infile.getline(buffer,512) != NULL)
{
linecount++;
invalue[linecount] = atof(buffer);};
for(i=1;i<linecount;i++)
{
cout << invalue[i] << endl;
};return 0;
}Beim Aufruf des Programms mus nun hinter dem Programmnamen die einzulesende Textdatei angegeben werden. Und schon sind alle Werte der Textdatei (ein Wert pro Zeile)
in dem Array "invalue" abgelegt.ach ja, die Zeile:
ifstream infile(argv[1], ios::in);
müsste laut DATA BECKER Buch so heißen:
ifstream infile(argv[1], ios::in|ios::nocreate);
damit bei fehlen einer Eingabedatei keine Leerdatei angelegt wird.
Das gibt allerdings sowohl unter linux mit gnu als auch unter Visual C++ unter Windows eine Fehlermeldung.
Hat jemand ne Ahnung warum ???Schöne Grüße,
revolutz