JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Daten einlesen
Gehe zu Seite 1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
peterbub
JLI'ler



Anmeldedatum: 24.07.2005
Beiträge: 109

Medaillen: Keine

BeitragVerfasst am: 09.12.2005, 19:40    Titel: Daten einlesen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
David
Super JLI'ler


Alter: 40
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 09.12.2005, 19:44    Titel: Antworten mit Zitat

Hi!

Schau dir mal das hier an.

grüße
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 09.12.2005, 19:59    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 09.12.2005, 20:21    Titel: Antworten mit Zitat

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 Wink ):
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 Smile

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 Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 09.12.2005, 20:48    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
sp3cK-r0LL3
Senior JLI'ler


Alter: 34
Anmeldedatum: 18.06.2004
Beiträge: 275

Medaillen: Keine

BeitragVerfasst am: 09.12.2005, 22:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 09.12.2005, 23:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 09.12.2005, 23:28    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
peterbub
JLI'ler



Anmeldedatum: 24.07.2005
Beiträge: 109

Medaillen: Keine

BeitragVerfasst am: 12.12.2005, 15:40    Titel: Antworten mit Zitat

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 Crying or Very sad


oder gibt es noch eine Möglichkeit Smile
also wichtig wäre, dass ich die zahlen in der Datei immer noch sehen kann

Gruß Peterbub
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 12.12.2005, 15:49    Titel: Antworten mit Zitat

peterbub
GermanGameDev sagt Dir die Antwort: http://www.germangamedev.de/index.php?site=faq&id=6
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
peterbub
JLI'ler



Anmeldedatum: 24.07.2005
Beiträge: 109

Medaillen: Keine

BeitragVerfasst am: 12.12.2005, 16:16    Titel: Antworten mit Zitat

schwiering Embarassed
was gehöhrt in die .h und was in die .cpp

und wo rufe ich das ab
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 12.12.2005, 16:24    Titel: Antworten mit Zitat

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 Wink Damit Du siehst, das sowas ignoriert wird.

edit: Habs mal überarbeitet Wink
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
peterbub
JLI'ler



Anmeldedatum: 24.07.2005
Beiträge: 109

Medaillen: Keine

BeitragVerfasst am: 12.12.2005, 16:34    Titel: Antworten mit Zitat

ja

test_string


versteht er nicht Crying or Very sad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 12.12.2005, 16:39    Titel: Antworten mit Zitat

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 Smile Mit "versteh ich nicht" kann ich Dir keine Erklärungen geben Wink

Telepatie kann ich leider (noch) nicht Very Happy
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
peterbub
JLI'ler



Anmeldedatum: 24.07.2005
Beiträge: 109

Medaillen: Keine

BeitragVerfasst am: 12.12.2005, 17:14    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Gehe zu Seite 1, 2, 3  Weiter
Seite 1 von 3

 
Gehe zu:  
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

Impressum