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
|
Verfasst am: 12.12.2005, 17:25 Titel: |
|
|
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 |
|
 |
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 12.12.2005, 20:14 Titel: |
|
|
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
aber nein!!! nur wie könnte es noch gehen  |
|
Nach oben |
|
 |
David Super JLI'ler
Alter: 40 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 12.12.2005, 20:36 Titel: |
|
|
Hi!
Müssen es die alten C Funktionen sein? Aber nagut!
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!
grüße |
|
Nach oben |
|
 |
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 12.12.2005, 20:39 Titel: |
|
|
müssen natürlich nicht die alten C Funktionen sein,
wenn es anders geht immer gerne
hab nur bei .bin das problem, dass ich die einträge nicht sehen kann
Gruss |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 12.12.2005, 20:43 Titel: |
|
|
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
So wenn Du noch fragen hast, frag  _________________ '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, 20:55 Titel: |
|
|
werde ich
nur mein erstes Problem ist , das es nicht funktioniert
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 |
|
 |
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 12.12.2005, 20:56 Titel: |
|
|
achso ich benutze noch VC++ 6.0! ist das schlimm oder soll ich das net benutzten ?? |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 12.12.2005, 20:57 Titel: |
|
|
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  _________________ '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, 21:03 Titel: |
|
|
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 |
|
 |
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 12.12.2005, 21:10 Titel: |
|
|
ok mein Haupt fehler liegt am VC++6.0
hab es jetzt mit dem NET probiert und es geht einwandfrei
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  |
|
Nach oben |
|
 |
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 12.12.2005, 21:22 Titel: |
|
|
noch eine frage :
lexical_cast ist nicht deklariert ?
oder besser gefragt, wie wandel ich einen String in ein Integer um? |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 12.12.2005, 22:33 Titel: |
|
|
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 12.12.2005, 23:46 Titel: |
|
|
peterbub
Guck mal auf Seite 1. dieses Topics
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 |
|
 |
peterbub JLI'ler
Anmeldedatum: 24.07.2005 Beiträge: 109
Medaillen: Keine
|
Verfasst am: 13.12.2005, 00:03 Titel: |
|
|
ja geht super
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 13.12.2005, 00:12 Titel: |
|
|
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
DAS ist C++ Nicht das eine da womit Du am Anfang experimentiert hast  _________________ '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 |
|
 |
|