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 Zurück  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
Patrick
Dark JLI Master



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

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

peterbub
Ich werd um spätestens 19:00 dazu was geschrieben haben. Bin jetzt auf dem Heimweg von der Arbeit. Wenn kein Stau auf der Autobahn ist, werd ichs ca. um 18:15 schreiben können.

- Patrick, der jetzt Feierabend macht.
_________________
'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, 20:14    Titel: Antworten mit Zitat

man kann auch:

int var[10];
int next=0;
Datei=fopen("test.txt","rt");
char puffer[256];
while(!feof(Datei))
{
fgets(puffer,255,Datei);

var[next]=(int) puffer;
next=next+1;

}

wäre es nicht schön , wenn es so gehen würde Laughing

aber nein!!! nur wie könnte es noch gehen Shocked
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: 12.12.2005, 20:36    Titel: Antworten mit Zitat

Hi!

Müssen es die alten C Funktionen sein? Aber nagut! Wink

CPP:
unsigned long var[ 10 ];
unsigned char pos = 0, i;

FILE *f = fopen( "Date.bin", "rb" );
for ( i = 0; i < 10; i++ )
{
   fread( &var[ pos++ ], sizeof( unsigned long ), 1, f );
}
fclose( f );


Vorraussetzung ist allerdings eine non ASCII Datei! Twisted Evil

grüße
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
peterbub
JLI'ler



Anmeldedatum: 24.07.2005
Beiträge: 109

Medaillen: Keine

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

müssen natürlich nicht die alten C Funktionen sein,
wenn es anders geht immer gerne Smile

hab nur bei .bin das problem, dass ich die einträge nicht sehen kann

Gruss
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, 20:43    Titel: Antworten mit Zitat

peterbub
Ich erkläre mal den Code von mir.

Warum? Weil Du dich nicht mit so altem Müll wie FILE rumschlagen sollst. Wenn, dann sollte man es doch auch anständig machen, ODER?


Als erstes brauchst Du folgende Header:
CPP:
#include <string>
#include <iostream>
#include <fstream>
#include <vector>
<string> wegen std::basic_string<T>
<iostream> wegen output von Text
<fstream> für FileStreams
<vector> für die splitString Funktion.

Diese Funktion erklären lass ich mal, das könnte für dich noch zu hoch sein, daher überspringen wir splitString einfach. Später wird es dir sehr einfach fallen.

Also! Ab in die main!

Als 1. Zeile wird dort ein buffer bereit gestellt für eine eingelesene Zeile. Typ ist ein std::basic_string<T>.

in der 2. Zeile laden wir die test.txt in einen FileStream der für das einlesen da ist "if" für "input file"

Dann geht es ab in eine while-Schleife. Die schleife wird solange ausgeführt bis std::getline auf ein EOF trifft (End Of File) und dann false zurückgibt. Tut sie das nicht, wird immer wieder eine Zeile (bis zum nächsten Zeilenumbruch) in Buffer geschrieben.

Nachdem eine Zeile eingelesen wurde, wird mit "empty();" getestet ob die Zeile überhaupt was beinhaltet, tut sie das nicht wird die Zeile übersprungen mit continue.

Falls etwas drin ist, wird das in die splitString-Funktion geballert und die gibt dann einen std::vector<std::basic_string<T> > zurück. Also ein Array mit vielen stringklassen drin.

Das nächste ist einfach. Da wird einfach die Anzahl werte ausgegeben die in der Zeile waren und jetzt im Vektor!

Dann werden die einzelnen werte ausgegeben die diese Zeile beinhaltet hat. Easy? Easy!

So nehmen wir an du hast Zahlen in deiner Datei, doch durch das einlesen mit getline in den buffer sind diese jedoch strings! Ergo: Musst Du strings in einen Integertypen umwandeln!

Hier wurd z.B. der lexical_cast von mir gezeigt samt beispiel.

So kannst du den 1. Wert in dem vector in eine zahl konvertieren und in eine unsigned long variable schieben:

CPP:
unsigned long value = lexical_cast<unsigned long>(split_string[0]);


Easy? Realy easy Wink

So wenn Du noch fragen hast, frag 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 ]
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, 20:55    Titel: Antworten mit Zitat

werde ich Smile

nur mein erstes Problem ist , das es nicht funktioniert Sad

also ich habe ein neues Project - Konsole - Einfache Anwendung->
fertiggestellt.

habe deinen Code Rein kopiert und es geht nicht !

soll ich die stdafx.h raus schmeissen ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
peterbub
JLI'ler



Anmeldedatum: 24.07.2005
Beiträge: 109

Medaillen: Keine

BeitragVerfasst am: 12.12.2005, 20:56    Titel: Antworten mit Zitat

achso ich benutze noch VC++ 6.0! ist das schlimm oder soll ich das net benutzten ??
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, 20:57    Titel: Antworten mit Zitat

peterbub
Okay: Exkurs in Dingen Programmerstellung:

1. Datei --> Neu
2- Neues Projekt
3. Win32 Console Application
4. LEERES PROJEKT erstellen
5. main.cpp erstellen und dem Projekt hinzufügen
6. Compilieren fertig.

Wie schon gesagt: ein leeres Projekt erstellen. Mit stdafx.h bekommste als anfänger Probleme, das ist etwas für fortgeschrittenere 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 ]
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, 21:03    Titel: Antworten mit Zitat

Hmm egal wie ich es mache , ich bekomme immer den selben fehler


main.cpp(21) : warning C4786: 'std::reverse_iterator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char
_traits<char>,std::allocator<char> > const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const *,int>' : Bezeichner wurde auf '255' Zeichen in den Debug-Informationen reduziert


muss ich in der Project einstellung noch was einstellen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
peterbub
JLI'ler



Anmeldedatum: 24.07.2005
Beiträge: 109

Medaillen: Keine

BeitragVerfasst am: 12.12.2005, 21:10    Titel: Antworten mit Zitat

ok mein Haupt fehler liegt am VC++6.0 Sad

hab es jetzt mit dem NET probiert und es geht einwandfrei Smile

muss jetzt nur noch herausfinden , wie ich die Werte einzeln bekomme und hoffe , das ich mit deiner Ausführlichen Erklärung weiter komme.

Ich werde mich melden Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
peterbub
JLI'ler



Anmeldedatum: 24.07.2005
Beiträge: 109

Medaillen: Keine

BeitragVerfasst am: 12.12.2005, 21:22    Titel: Antworten mit Zitat

noch eine frage :

lexical_cast ist nicht deklariert ?

oder besser gefragt, wie wandel ich einen String in ein Integer um?
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: 12.12.2005, 22:33    Titel: Antworten mit Zitat

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);
}

lexical cast hat man, oder man hat ihn nicht. Einfach in die header diener Wahl kopieren.
_________________
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: 12.12.2005, 23:46    Titel: Antworten mit Zitat

peterbub
Guck mal auf Seite 1. dieses Topics Wink

Für den lexical_cast benötigst du 1. die <sstream> und 2. den lexical_cast den du auf seite 1 findest.
_________________
'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: 13.12.2005, 00:03    Titel: Antworten mit Zitat

ja Very Happy geht super Cool

sieht zwar alles etwas ungewohnt aus, aber vieleicht gewöhne ich mich mal daran, ständig diese ":: und > >< >> << ",sprache zu benutzen,
aber wenn das das neue C++ ist dann muss ich mir das irgend wann mal angewöhnen.

Danke nochmal
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: 13.12.2005, 00:12    Titel: Antworten mit Zitat

peterbub
Das ist nicht das "neue" C++, sondern das ist C++.

Das mit FILE, fopen und co. das ist ältester C-Müll aus der Steinzeit. Viele sagen C++ wäre nur eine Erweiterung für C, was totaler schwachsinn ist.

In C++ benutzt, man kein printf, FILE, malloc usw. da gibt es Streams, operatoren uvm Wink

DAS ist C++ Wink Nicht das eine da womit Du am Anfang experimentiert hast 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 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
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 Zurück  1, 2, 3  Weiter
Seite 2 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