WIN32/WINAPI File I/O
-
Moin Dragonraider,
nein, beherrsche ich nicht. Ich suche auch nur eine Lösung für den Datenimport für mein Projekt, das nun mal eine grafische Anwendung (opengl)auf Basis der WIn32Api ist. Als Consolenanwenung bekommme ich einiges hin, aber das hilft mir jetzt nicht weiter, ich kriege die Transferleistung nicht hin. Ich habe dazu auch schon ein Jobangebot eingestellt. Es ist mir also ERNST mit meinem Vorhaben. Ich bin nicht auf dem Weg zum C++ Programmierer, ich suche nur eine Lösung für meine Aufgabe. Wer mir also helfen kann, dessen Schaden soll es nicht. www.stellenwerk-hamburg.de Gruß Mathias
-
Hi mat65,
Ich würde dir gerne helfen. Dazu hätte ich zwei Bitten:
1. Könntest du bitte mal die "Form" einer Inputdatei angeben(Sorry, falls ichs überlesen hab)?
2. Könttest du bitte die Code-Tags nutzen(Habe das für meinen Beitrag mal kurz deaktiviert, damit du siehst, wie)?
Für C++ code(Dein Code)
Für z.B. die Bsp. Datei:
ggfgrr
MfG
DragonRaider
-
Moin und vielen dank. Bin gerade unterwegs. Wir stehen noch beim code von nwp3 mit den nachfolgenden antworten.
-
Input (AMP1.txt mit Leerzeichen getrennt):
NAME: fABpx0 fABpy0 fABpz0 iTEX_AREA_1 fYWTodo fYWDone fYWBpx0 fYWBpy0 iYWInTime0 fPWTodo fPWDone fPWBpx0 fPWBpy0 iPWInTime0
Block1: 0.0 0.0 1.0 2 0.4 0.2 0.0 0.0 0 1.6 0.6 0.0 0.0 1
Block2: 8.0 0.0 1.5 3 0.4 1.0 0.0 0.0 1 1.6 0.4 0.0 0.0 1
Block3: -8.0 0.0 1.5 3 0.4 0.1 0.0 0.0 0 1.6 0.4 0.0 0.0 0void OpenGL_Init :: opengl_draw_AREA_BLOCK_1(){ HANDLE file = CreateFileA("C:\\AMP\\AMP1.txt", GENERIC_READ, 0, 0, OPEN_ALWAYS, 0, 0); if (file == INVALID_HANDLE_VALUE){ wprintf(L"Konnte Datei nicht öffnen: %s\n", getReadableErrorMessage()); //return 0; } wchar_t buffer[1024]; DWORD read; if (!ReadFile(file, buffer, sizeof buffer / sizeof *buffer - 1, &read, 0)){ wprintf(L"Konnte Datei nicht lesen: %s\n", getReadableErrorMessage()); //return 0; } buffer[read] = 0; wprintf(L"Inhalt der Datei:\n%s\n", buffer); CloseHandle(file); int rueckgabewert = swscanf(buffer, L"Name: Wert:\n\fABpx0 %ff\n\fABpy0 %ff\n\fABpz0 %ff\n",&fABpx0, &fABpy0, &fABpz0); if (rueckgabewert != 3) printf("Konnte %d/3 Variablen einlesen, Formatstring stimmt nicht mit Dateiinhalt überein", rueckgabewert); //AREA// /*fABpx0 = 0.0f; fABpy0 = 0.0f; fABpz0 = 1.0f; iTEX_AREA_1 = 2;*/ //"C:\\AMP\\IMAGE\\AIDA_14_Playground.jpg" iTEX_AREA_1 = 2; //ÝARD// fYWTodo = 0.4f*fASF; fYWDone = 0.2f*fASF; fYWBpx0 = 0.0f; fYWBpy0 = 0.0f; iYWInTime0 = 0; //PARTNER// fPWTodo = 1.6f*fASF; fPWDone = 0.6f*fASF; fPWBpx0 = 0.0f; fPWBpy0 = 0.0f; iPWInTime0 = 1; //CALCULATION// fYWBpy2 = fYWTodo; //Yard Work todo fYWBpy1 = fYWDone; //Yard Work done fPWBpy2 = fPWTodo; fPWBpy1 = fPWDone; fXAreaWidth = fAreaWidth/2; fYWBpx1 = +(fABpx0+fGantWidth+fXAreaWidth); if( fABpx0<0){ fPWBpx1 = -fABpx0-fGantWidth-fXAreaWidth; } else{ fPWBpx1 = (fABpx0-fGantWidth-fXAreaWidth); } //FUNCTION// opengl_draw_area (); opengl_draw_WorkFrame (); opengl_draw_Work (); }//draw_AREA_BLOCK
Am Ende sind es n-Blöcke mit 14 Variablen, die aus der textDatei ausgelesen warden. Ich habe mal mit den x,y,z Koordinaten angefangen. Alles mit f ... (float) í ... (int). Die Daten sollen auch nur einmal eingelesen werden, nicht mit jedem Frame.
Hoffe, das beantwortet deine Fragen. Unter www.stellenwerk-hamburg.de findest Du weitere Kontaktdaten.
-
Hi mat65,
Sind die Namen immer in der gleichen Reihenfolge?
Noch ne Frage: Ist das deins http://www.stellenwerk-hamburg.de/jobs-finden/private-jobangebote/details/anzeige/hh-2013-06-17-60/browse/31.html
MfG
DragonRaider
-
Moin,
nein, diese ID: HH-2013-06-22-13
Ja, immer die gleiche Reihenfolge, so der plan.wchar_t buffer[1024]; wchar_t str1 [20]; int rueckgabewert = swscanf (buffer,L"%ls %f",str1,&fABpx0);
mit fABpx0 0.0 funktioniert es schon mal
ein Kleinsterfolg.
-
Hi,
Ich finde zwar dein Jobangebot gerade nicht, ist jetzt aber, meiner Meinung nach, auch egal. Ist es dir auch recht, wenn ich es nicht mit swscanf mache, sondern selber was schreibe?
MfG
DragonRaider
-
Moin,
HANDLE file = CreateFileA("C:\\AMP\\AMP3.txt", GENERIC_READ, 0, 0, OPEN_ALWAYS, 0, 0); wchar_t buffer[1024]; DWORD read; if (!ReadFile(file, buffer, sizeof buffer -1, &read, 0)){wprintf(L"Konnte Datei nicht lesen: %s\n", getReadableErrorMessage()); //return 0; } buffer[read] = 0; wprintf(L"Inhalt der Datei:\n%s\n", buffer); CloseHandle(file); wchar_t str1 [20]; int rueckgabewert = swscanf (buffer,L"%ls %f %f %f %d %f %f %f %f %f %d %f %f %f %f %f %d",str1,&fABpx0,&fABpy0,&fABpz0,&iTEX_AREA_1,fYWTodo,fYWDone,fYWBpx0,fYWBpy0,iYWInTime0,fPWTodo,fPWDone,fPWBpx0,fPWBpy0,iPWInTime0); if (rueckgabewert != 4) printf("Konnte %d/3 Variablen einlesen, Formatstring stimmt nicht mit Dateiinhalt überein", rueckgabewert);
Läuft
jetzt fehlt nur noch die While schleife für n-datenBlöcke.
Aber gern nehme ich auch deinen Vorschlag an.
Wenn wir das als Job machen, dann brauche ich noch einen Preis, hinterher ist immer schlecht.
-
Hi,
Ich schreibe gerade an einer Version mit zwei Klassen, die das ganze ziemlich simpel machen würde. Zum Thema Preis: Mach nen Vorschlag. Gibt's hier vllt so was wie PM? Ich habe gerade keine Lust, hier meine E-Mail hin zu schreiben. Ich erwarte jetzt auch kein Vermögen, klar. Erstmal muss dir ja mein Ansatz gefallen.
MfG
DragonRaiderPS.: Freut mich, dass es schon so weit klappt
-
mat18057(at)web.de als Kontakt