WIN32/WINAPI File I/O



  • Kollegen, vielen Dank für eure Unterstützung.
    Ich probier es mal mit einem Bild.
    Ich war einkaufen, die Einkäufe stehen in der Wohnung, der Kühlschrank noch auf der Strasse.
    Jetzt suche ich jmd der mir den Kühlschrank in die Wohnung stellt.
    Ich bekomme Tipps für Krafttraining, gesunde Ernährung usw ..., das hilft jetzt nicht wirklich.
    Ich will weiter Opengl kochen und nicht Kühlschränke tragen können.
    Wenn noch jmd helfen möchte wäre ich sehr dankbar, ansonsten bin ich raus.
    Enjoy the summer ...



  • du willst opengl programme schreiben aber kannst nicht mal die einfachsten Grundlagen... dann biste wohl raus. Deine Opengl code möchte ich gar nicht erst sehen.



  • Moin, ein kleiner Teilerfolg,die Werte stehen jetzt im Buffer,

    wchar_t buffer[1024]; 
    DWORD read; 
    int rueckgabewert = swscanf(buffer, L"Name: Wert:\r\nfABpx0 %f\r\nfABpy0 %f\r\nfABpz0 %f\r\niTEX_AREA_1 %d",&fABpx0, &fABpy0, &fABpz0,&iTEX_AREA_1);
    

    rueckgabewert = 0
    buffer = 0x0023ea44 "Name: Wert:
    fABpx0 0.0
    fABpy0 0.0
    fABpz0 1.0
    iTEX_AREA_1 2쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌"
    fABpx0 = -1.0737418e+008;fABpy0 = -1.0737418e+008;fABpz0 = -1.0737418e+008;iTEX_AREA_1 = -858993460
    Wie ordne ich nun die Werte aus dem Buffer den entsprechenden Variablen zu.



  • Hi mat65,
    Mal ne kleine Frage(das soll jetzt nicht unhöflich wirken): Beherrschst du die Grundlagen des "standard" C++? Ich würde mich erstmal um Consolenprogramme kümmern und da rumexperimentieren. Als ich angefangen habe wollte ich auch sofort mit der WinApi arbeiten, aber das geht (leider) nicht ohne ein bisschen Erfahrung. Ich fand die MSDN Artikel früher auch ziemlich kompliziert/unverständlich formuliert. Ich weiß, dass du das jetzt nicht hören willst, aber wie wärs, du übst erstmal noch ein bisschen mit der Console?
    MfG
    DragonRaider



  • 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 0

    void 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
    DragonRaider

    PS.: Freut mich, dass es schon so weit klappt 🙂



  • mat18057(at)web.de als Kontakt


Anmelden zum Antworten