 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 09.12.2005, 19:40 Titel: Daten einlesen |
|
|
Hallo,
wie kann ich Daten einlesen.
also ich hätte gerne eine .txt mit so oder ähnlichem inhalt
20,30
oder hab ich nur mal gesehen
var{1;2;3}
habe aus dem tollem Buch jetzt lern ich ...
sowas gefunden
FILE *Datei;
int zahl=50;
Datei=fopen("test.txt","w");
fprintf(Datei,"%d",zahl);
fclose(Datei);
Datei=fopen("test.txt","rt");
char puffer[256];
while(!feof(Datei))
{
fgets(puffer,255,Datei);
}
fclose(Datei);
so mit einer char kann ich irgend wie nichts anfangen
int ne = (int)puffer;
geht nicht.
wie kann ich die zahl nutzten
wie kann ich mehrere zahlen speichern und nutzen
mit Binärdateien: fwrite /fread , kann ich in der .txt nichts sehen
Gruß peterbub |
|
Nach oben |
|
 |
David Super JLI'ler
Alter: 40 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 09.12.2005, 19:44 Titel: |
|
|
Hi!
Schau dir mal das hier an.
grüße |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 09.12.2005, 19:59 Titel: |
|
|
Also wenn du nurn paar Infos speichern willst, sind ja INI-Dateien sehr schön.
GetPrivateProfileString(Section, Key, "error", Output, 255, Filename);
Einfach mal in dem MSDN nach suchen, da findet man genug Informationen. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 09.12.2005, 20:21 Titel: |
|
|
hi, du hast in dem Fall mehrere Möglichkeiten, ich nenn dir ma 2:
1. die Boardsuche führt dich zum Lexical_cast, hat Patrick ma gepostet. Der sieht dann so aus(übrigens: Codetags benutzen ): CPP: | template<typename A, typename T> inline const A lexical_cast(const T& source)
{
::std::basic_stringstream<char> s;
A destination;
if(!(s << source) || !(s >> destination) || !(s >> ::std::ws).eof())
throw "bad lexical cast";
return (destination);
}
// [...]
::std::basic_string<char> bla = lexical_cast<::std::basic_string<char> >(mein_int); | musst den dann eben nur noch anpassen; bzw. bei Verständnisfragen Patrick fragen
2. du benutzt das veraltete, schlechte, einfache, aber funktionierende fscanf(). Das würde bei deinem Bsp. dann so aussehen: CPP: | int meinInt; // Variable zur Speicherung der Zahl aus der Datei
Datei=fopen("test.txt","r"); // Datei öffnen
fscanf(Datei,"%d", &meinInt ); // Zahl aus Datei in meinInt speichern
fclose(Datei);
|
funktioniert halt wie fprintf(); nur dass du net schreibst sondern liest und außerdem bei deinem Int als 3. Parameter die Adresse angeben musst; denn der muss ja Zugriff auf deine Variable haben
Gruß DirectXer  |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 09.12.2005, 20:48 Titel: |
|
|
gibt natürlihc auch noch atof und atoi um char*'s in float bzw. int umzuwandlen. Außerderm kann man sich natürlich selber ne Funktion schreiben so wie ichs natprlich aml wieder getan hab, weil ich die anderen net kannte... _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
sp3cK-r0LL3 Senior JLI'ler

Alter: 34 Anmeldedatum: 18.06.2004 Beiträge: 275
Medaillen: Keine
|
Verfasst am: 09.12.2005, 22:56 Titel: |
|
|
warum atoi? lexical cast geht doch genauso gut... ich peril das manchmal nicht.. wenn ich 5 stunden bräuchte um den scheiß zu lernen, und ein etwas schlechteres da wäre, aber viel einfacher dann ist klar..
aber bei lexical cast!?! das hab ich nach 2 minuten gepeil und es funzt eigentlich immer... _________________ sex is updatedb; locate; talk; date; cd; strip; look; touch; finger; unzip; uptime; gawk; head; apt-get install condom; mount; fsck; gasp; more; yes; more; umount; apt-get remove --purge condom; make clean; sleep |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 09.12.2005, 23:09 Titel: |
|
|
was heißt den heir 5 Stunden?
Für jemanden der noch net so viel gemacht hat, ist son cast bestimmt komplizeirter als ne einfach Funktion. Da muss man nur ne Header einbinden, und fertig ist. Jede Methode hat Vortiele, stl ist manchmal auch langsmaer als stdio. Ist nur ne Frage was man bevorzugt, ich dachte es wäre sinnvoll Alternativen aufzuzeigen. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 09.12.2005, 23:28 Titel: |
|
|
Jonathan_Klein
Langsamer? Nö kommt drauf an worums geht. Überladener ist sie, das ist auch das einzigste. Nebenbei lexical_cast rult halt.
GetPrivateProfileString? Mal ehrlich, wozu? Einen ini-Parser zu schreiben ist leichter als CSV-Dateien zu laden. Nebenbei bessere übung und es geht auch mit relativierten Pfadangaben! GetPrivateProfileString? Fürn Müll!
Dazu dieses ganze FILE-Gedöns da muss doch echt nicht sein! Schau Dir doch mal fstreams an! FILE kommt aus der Steinzeit und hat in C++ nichts zu suchen.
edit: Dazu wieder überall char! Jesus... Ich dachte das Mittelalter seie vorbei? _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
 |
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 12.12.2005, 15:40 Titel: |
|
|
kann man das irgend wie erweitern ?
zum Beispiel:
in der .txt steht
23,23,34,45,56,67,78,12,23,34,76,87
also mehrere zahlen, vieleicht auch noch viel mehr, das weiss ich noch nicht.
kann man da ein schleife bauen?
weil dass:
fscanf(Datei,"%d", &var1,&var2,&var3,...);
ist dann wahnsinn
oder gibt es noch eine Möglichkeit
also wichtig wäre, dass ich die zahlen in der Datei immer noch sehen kann
Gruß Peterbub |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 12.12.2005, 16:16 Titel: |
|
|
schwiering
was gehöhrt in die .h und was in die .cpp
und wo rufe ich das ab |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 12.12.2005, 16:24 Titel: |
|
|
peterbub
Habs mal flüchtig aus dem Kopf gemahct, kann sein das ein Fehler drine ist.
CPP: | #include <string>
#include <iostream>
#include <fstream>
#include <vector>
// Splittet einen String
inline const std::vector<std::basic_string<char> > splitString (const std::basic_string<char>& s,
const std::basic_string<char>& sep)
{
// Gestartet wird an Position 0.
std::basic_string<char>::size_type position = 0;
// Tempvector erstellen.
std::vector<std::basic_string<char> > result;
// Parsen
do result.push_back(s.substr(position,s.find(sep,position)-position));
while((position+=sep.length()+result[result.size()-1].length()) && position < s.length());
// Tempvector zurückgeben.
return (result);
}
int main (void)
{
std::basic_string<char> buffer; // Buffer bereitstellen
std::basic_ifstream<char> input ("test.txt"); // Datei einlesen
// Solane eine Zeile einlesen bis keine mehr da ist.
while (std::getline(input, buffer))
{
// Wenn die Zeile leer ist überspringen
if (buffer.empty ())
continue;
// Zeile Splitten nach ','
std::vector<std::basic_string<char> > split_string (splitString(buffer, ","));
// Anzahl werte ausgeben
std::cout << "In dieser Zeile sind: " << split_string.size() << " Werte enthalten!" << std::endl;
// Werte ausgeben einzeln
for (unsigned long i=0; i<static_cast<unsigned long>(split_string.size()); ++i)
std::cout << i << ". Wert: " << split_string[i] << std::endl;
}
std::cin.get();
return 0;
}
|
und hier eine test.txt CPP: | 5,4,8,4,4,8,99,7,7
5,4,8,88,4,8,0
5,4,8,2,4,8,5
2,3,8,8,4,8,0 | Achja, der Absatz ist extra drine Damit Du siehst, das sowas ignoriert wird.
edit: Habs mal überarbeitet  _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Zuletzt bearbeitet von Patrick am 12.12.2005, 16:48, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 12.12.2005, 16:34 Titel: |
|
|
ja
test_string
versteht er nicht  |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 12.12.2005, 16:39 Titel: |
|
|
peterbub
Don't cry. Habs überarbeitet. Benutzt Du nun Copy'n Past geht es. Wenn Du fragen hast: Stell sie bitte GANZ Präzise was Du nicht verstehst Mit "versteh ich nicht" kann ich Dir keine Erklärungen geben
Telepatie kann ich leider (noch) nicht  _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
 |
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 12.12.2005, 17:14 Titel: |
|
|
Gut dann versuch ich es mal:
wo bekomme ich jetzt der reihe nach der werte der .txt Datei.
ich wochte jetzt z.B.: die ersten 3 Zahlen haben
Ich nehme an das e sirgendwo dadrinnen verstecht ist
for (unsigned long i=0; i<static_cast<unsigned long>(split_string.size()); ++i)
std::cout << i << ". Wert: " << split_string[i] << std::endl;
Aber nur
int Zahl1 = split_string[0];
geht nicht |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|