Zum Inhalt springen

idefix

Mitglieder
  • Gesamte Inhalte

    44
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von idefix

  1. Vielleicht helfen dir Library's für das Parsen weiter: GRETA: http://research.microsoft.com/projects/greta/ BOOST: http://www.boost.org/ lex yacc: http://www.monmouth.com/~wstreett/lex-yacc/lex-yacc.html hier noch ein vergleich zwischen GRETA & BOOST (MS lastig) http://research.microsoft.com/projects/greta/regex_perf.html In der C-Library gibt es nartürlich auch fscanf und sscanf In der stl ist es dann ofstream mit dem operator >> und stringstream (bin mir aber nicht ganz sicher) Nun das sollte fürs Erste reichen. Die Library's wirken etwas übertrieben für eine solche "trivale" Aufgabe, aber prinzipiell anwendbar. Ich bin mir aber nicht sicher inwieweit diese Thread sicher sind. Würde mich ja interessieren was du nun gewählt hast und welche Erfahrung du gemacht hast. Oder war's nur ein Schuß ins Blaue?
  2. Klingt interessant. Mal seh'n wo die Reise hingeht. Also, mit schliessen meine ich nicht das File die ganze Zeit auf zulassen, sondern nur bis alle Werte ausgelesen sind. Wenn deine Routine in mehreren Threads aufgerufen wird, gibt's glaube ich Probleme mit static Buffer. Beispiel: char sBuffer[512]; char *p; FILE* pF; long n; long nPos; long nPosBracketOpen; long nPosBracketClose; char sWert[128]; pF=fopen(....); while(feof(pF)) { n=fread(sBuffer,sizeof(char),sizeof(sBuffer),pF); p=sBuffer; while((p-sBuffer)<=n) { //if( suchen==true) { nPos=fseek(pF,0,SEEK_CUR); fseek(pF,nPosBracketOpen+1,SEEK_SET); fread(sWert,sizeof(char),nPosBracketClosenPosBracketOpen,pF); fseek(pF,nPos,SEEK_SET); } } } fclose(pF); ich weiß geht alles auch mit std::ifstream (fopen,fseek,fclose ...) das geht nartürlich nur wenn sich die Datei nicht laufend ändert (jedenfalls weiß ich das nicht so genau) Was ich als Gedankenanstoß geben wollte ist, dass das Lesen der Werte im File geht und das Parsen im Buffer. Die Verbindung beider über File Position. Die Größe des Buffers klein gehalten werden kann. PS: Quellcode habe ich nicht aus probiert, kann sein das ich was vergessen habe
  3. Was heißt für dich eleganter? ein Problem wird wahrscheinlich sein, wenn das File größer als 16000 Byte ist. Warum schließt du das File und suchst im Speicherblock? Man könnte doch auch blockweise lesen (z.B. 512 Byte) und den File Pointer zum Werte auszulesen benutzen. Vielleicht ist es dann auch möglich die Schleifenschachtelung etwas zuminimieren. Ansonsten sehe ich kein Problem, es sei denn während des Parsens tretten Fehler auf oder die Syntax der CNF-Files variiert. Wenn, die Werte sich immer an der gleichen Stelle befinden könnte man doch über eine Offset-Parameter nachdenken.
  4. #include <string> #include <algorithm> std::string t="moin"; std::transform(t.begin(),t.end(),t.begin(),toupper);
  5. Lösungsvorschlag: wie gesagt goto stört irgendwie //////////////////////////////////////////// void ZahlenEingeben(int& z1,int& z2) { cout<<"Bitte erste Zahl eingeben: "; cin>>z1; cout<<"Bitte zweite Zahl eingeben: "; cin>>z2; } //////////////////////////////////////////// char BerechnungsArt(char c) { switch(c) { case 's': case 'S': return '-'; case 'a': case 'A': return '+'; default: return c; } } //////////////////////////////////////////// int Berechnen(char s,int z1,int z2) { switch(s) { case '-': return z1-z2; case '+': return z1+z2; } return 0; } //////////////////////////////////////////// int main(int argc, char* argv[]) { int zahl1; int zahl2; int ergebnis; char ausw; char art; bool bEingabe=true; bool bBerechnen=false; cout<<"Wilkommen bei meinem Taschenrechner!\n"<<endl; Menue: cout<<"Gib a/A = Addieren, s/S = Subtrahieren,"<<endl; cout<<"m/M = Multiplizieren oder d/D = Dividieren ein"<<endl; cout<<"n/N = noch mal"<<endl; cout<<"b/B = beenden"<<endl; cin>>ausw; art=BerechnungsArt(ausw); switch(art) { case '-': case '+': if(bEingabe) { ZahlenEingeben(zahl1,zahl2); } ergebnis=Berechnen(art,zahl1,zahl2); bEingabe=true; cout<<"Das Ergebnis lautet: "<<zahl1<<art<<zahl2<<"="<<ergebnis<<endl<<endl; break; case 'n': bEingabe=false; break; case 'b': return 0; } goto Menue; } <EDIT: Bitte Code-Tags benutzen | Klotzkopp>
  6. Dafür hast du doch goto Menue eingebaut? wie wärs mit n für noch mal die Variablen int zahl1; int zahl2; haben doch dann noch die Werte. Muß dir nur noch merken welches das letzte Menue war. g für (keine Ahnung) setzt eine Variable die das einlesen der zahlen unterbindet und wieder goto menue; Wird wahrscheinlich richtig unübersichtlich.
  7. versteh' die Frage nich'
  8. if(ausw=='s'||'S') ? wenn ausw=='s' oder 'S' das wird im wahr sein weil 'S' immer ungleich 0 ist besser if( (ausw=='s') || (ausw=='S')) du kannst ja mal deine if else abfrage in switch(ausw) { case 's': case 'S': //Quelltext break; case 'b':case 'B': return 0; } goto menue; änderen danach sollten wir goto wegnehmen
  9. cin>>"Bitte Auswaehlen: ">>ausw; in cin>>ausw; änderen Still ist allerdings einwenig unübersichtlich. goto anweisungen sind zwar erlaubt, aber solltest du von anfang an VERMEIDEN
  10. einmal klassisch C char szText[64]; int iNumber=22; sprintf(szText,"%d",iNumber); oder mit stl std::ostringstream out; std::string sText; out<<iNumber; oder out<<"Nummer:"<<iNumber; sText=out.str();
  11. vieleicht wirst du hier fündig www.codeproject.com/dll/keyboardhook.asp dir fehlt wahrscheinlich einmal __declspec(dllexport)__stdcall und (viel wichtiger) #pragma data_seg für g_hHoook,g_hInstance weil die globalen Variablen aus unterschiedlichen Threads bze Prozessen aufgerufen werden
  12. wahrscheinlich ein Tippfehler. aber LPSTR text; ? sollte sein char text[100];
  13. bist du dir sicher das du auch ein ListCtrl hast? Window=CWnd::FromHandle(hwnd); ? Wie sollte ein Window/CWnd aus einer andern Applikation in der CWnd Map deiner Applikation vorhanden sein? (afxMapHWND) ich würde die Win32 API pure benutzten um Daten fremder Applikation auszulesen
  14. Ich denke das du mit dieser Funktion was anfangen kannst virtual void OnLBSelChangedNotify( UINT nIDBox, UINT iCurSel, UINT nCode); nCode: CD_LBSELCHANGE CD_LBSELSUB CD_LBSELADD CD_LBSELNOITEMS Hier noch einige Links zu cp Hoffe das diese weiter helfen http://www.codeproject.com/dialog/selectfolder.asp http://www.codeproject.com/dialog/customize_dialog.asp
  15. CFileDialog dlg( TRUE, NULL, m_Info.getFileName() ); intern ist m_ofn.lpstrFile dafür zuständig. Bevor DoModal auf gerufen wird
  16. :p mal probieren ob die Kürzel sich zeigen
  17. Ansonsten kann man auch folgendes machen CMyDraw::public CWnd { OnPaint() { //Malen nach Zahlen } }; CEditFrame::public CWnd { CEdit m_Edit; CMyDraw m_MyDraw; BOOL Create(...) { //Rect soaufteilen das es passt //Easy go m_Edit.Create(...,this,.); m_MyDraw.Create(...,this,); CWnd::Create(..,&Rect...); } };
  18. vieleicht hilft dir dieser Link www.codeproject.com/staticctrl/alexf_histogram.asp ist aber eine staticctrl
  19. Ein RichEdit kann Ole Objekte (ActiveX Ctlrs) aufnehmen. Da die Eigenschaften des ActiveX Ctrls frei definierbar sind kannst du alles mögliche machen. Ist aber nicht ganz einfach. Müsstest dich mit COM, Intefaces, Reg und so auseinandersetzen. Problem wird dann wahrscheinlich die Plazierung sein. EditCtrls sind für Eingaben gemacht. Wenn darin gezeichnet werden soll wird auch die Eingabe und das Zeichnen der Eingabe, Cut&Paste und so überschrieben. Kann man dann selber wieder einbauen. Beispiele habe ich leider nicht zur Hand, aber kannst ja mal WM_PAINT überschreiben. Nur so um abzuschätzen ob sich der Aufwand lohnt. Hege den Verdacht das du eigentlich keine Eingabe brauchst, sonder mehr Text mit Zeichnen was eigentlich eher ein StaticCtlr ist. Was die Sache enorm vereinfachen wird.
  20. Was willst'n wissen? Beispiele gibt eigentlich wenige und noch weniger in deutsch. void CHelloView::OnCustom() { CHelloDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CColorDialog dlgColor(pDoc->m_clrText); if (dlgColor.DoModal() == IDOK) { pDoc->m_clrText = dlgColor.GetColor(); pDoc->ClearAllColors(); pDoc->m_bCustom = TRUE; pDoc->UpdateAllViews(NULL); } } Eigentlich gibt's nicht viel zuerklären
  21. Möchtest du auf dem Dialogfeld zeichen, oder möchtest in einem EditCtrl zeichen? Innerhalb eines EditCtrls zeichen ist nicht ganz einfach. Ich würde sagen das du dir das noch mal überlegen solltest ob das wirklich notwendig ist. Man könnte zum beispiel optisch so tun als wenn, obwohl es zwei Fenster sind. Ich bin nicht ganz sicher aber vieleicht hilft auch ein RichEditCtrl. Würde die ganze Sache dann aber in eine ganz andere Richtung drängen.
  22. GetShortPathName( LPCTSTR lpszLongPath, // null-terminated path string LPTSTR lpszShortPath, // short form buffer DWORD cchBuffer // size of short form buffer );
  23. GetDlgCtrlID((HWND)lParam) muss es natürlich heißen
  24. falsch das war MFC case WM_CTLCOLORSTATIC: //wenn es read only ist case WM_CTLCOLOREDIT: //wenn es editierbar ist WPARAM wParam, //HDC LPARAM lParam, //HWND GetDlgItem((HWND)(lParam)) // CtrlID
  25. case: WM_CTRLCOLOR: { }

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...