GetPrivateProfileString Lesefehler



  • Tag zusammen.
    Ich bin relativ neu auf dem Gebiet der C++-Programmierung, also verzeiht mir meine Unwissenheit.
    Ich versuche eine INI-Datei auszulesen. Diese sieht Folgendermaßen aus:

    [TimeData_1]
    TotalTime=235.328,0
    StartTime=0,0
    0=0,0,0,0, ,,0,0
    1=0,1.000,0,0, ,,0,0
    3=0,2.000,0,0, ,,0,0
    4=0,3.000,0,0, ,,0,0
    5=0,4.00,0,0, ,,0,0
    

    Auf diese greife ich also mit GetPrivateProfileString() zu:

    for(int l=1; l<7; l++){  
      char Key[200];
      char Zahl[99];
      sprintf_s(Zahl, "%i", l);
    GetPrivateProfileString("timedata_1", Zahl, "ERR", Key, sizeof(Key), "C:\\...\\1_0.ini");
    
    //Hier folgt Umwandlung in Strings, Speichern der Zahlen aus der INI in einem Vector etc
    }
    

    Es werden hier ja nun die Keys durchiteriert, dann als Char-Array zurückgegeben und dann von mir in Strings umgewandelt und weiterverarbeitet. Meine Frage ist nun: Wenn, wie in meiner INI-Datei dann aber zB der Key "2" fehlt, was bekomme ich dann in den Rückgabe array von GetPrivateProfileString? eigentlich doch ['E', 'R', 'R'], oder? Das heißt ich müsste ja mit einer einfachen Abfrage von

    if(Key[0]=='E'){
    
    //Hier dann anderen Wert in Vektor schreiben
    
    }
    

    überprüfen können?
    Das Problem ist nun aber, wenn ich die Werte dann in einem Widget (ich benutze Qt4.8) nutzen will, zeigt das Ganze nur bis zum ersten fehlendem Key an, danach gar nichts mehr, selbst wenn dann wie bspw. bei Key=3 wieder Werte vorhanden wären. Woran könnte das liegen? Fehlt mir irgendwas beim Verständnis der Funktion?



  • Dir ist schon klar dass du uns genau den Code wo was falsch sein könnte nicht gezeigt hast, oder?



  • Ich denk mal du meinst den, in dem ich die Zeichen umwandel etc..

    QString sZeit;
    
      QString snum, snum2, snum3, snum4;
      
      QString Fehlercode = Key[0]+Key[1]+Key[2];
    
      if(Key[2] != '.' && Key[0] !='E')
      {
    		char s = Key[2];
    		int num = s - '0';
    		snum = QString::number(num);
    	
      }else if(Key[2]=='.'){
    		
    	  snum = ".";
    
      }else if(Key[0]=='E'){
    	
    		snum="0";
    
      }
    
      if(Key[3]!='.'&& Key[0] !='E'){
    	 
    	  char s2 = Key[3];
    	  int num2 = s2- '0';
    	  snum2 = QString::number(num2);
    	  
      }else if(Key[3]=='.'){
    		snum2 = ".";
    	  
      } else if(Key[0]=='E'){
    	
    		snum2="0";
    
      }
      
      if(Key[4]!='.'&& Key[0] !='E'){
    	  char s3 = Key[4];
    	  int num3 = s3 -'0';
    	  snum3 =  QString::number(num3);
    	  
      }else if(Key[4]=='.'){
    		
    	  snum3 = ".";
    	  
      }else if(Key[0]=='E'){
    	
    		snum3="0";
    
      }
      
      if(Key[5]!='.' && Key[0] !='E'){
    	  
    	  int s4 = Key[5];
    	  int num4 = s4 - '0';
    	  snum4 = QString::number(num4);
    	  
      }else if(Key[5]=='.'){
    		
    	  snum4 = ".";
    	  
      }else if(Key[0]=='E'){
    	
    		snum4="0";
    
      }
    
      sZeit = snum + snum2 + snum3 + snum4;
      vsZeit.push_back(sZeit);
      dZeit = sZeit.toDouble();
      vdZeit.push_back(dZeit);
    

    Wenn ich mir ausgeben lasse, was im Stringvektor sZeit steht, kommt auch '0000' raus, aber irgendwie zerstört das dann die Anzeige und der kann damit als double nix anfangen. Die wird dann einfach auch in einer schleife ausgegeben..

    for(int i=0; i<sizeof(vdZeit); ++i)
    	{
    		//Länge des Blocks übergeben
    		Laenge = vdZeit[i]*5;//(rand () % ((b + 1) - a)) + a;
    		//Länge in Vektor speichern
    		vLaenge.push_back(Laenge);
    		
    
    		int cK1=60;	
    		cK1=cK1+vLaenge.at(i-1);
    
    		box=new QFrame(this);
    		box->setGeometry(QRect(cK1, 74, vLaenge.at(i), 31));
    		box->setFrameShadow(QFrame::Plain);
    		box->setLineWidth(20);
    		box->setFrameShape(QFrame::HLine);
    //Hier kommt nur noch festlegen der Farbe etc.
    

    Das ist der Code zur anzeige.. Das was aus der INI abgefragt wird ist am ende dann die Länge des Widgets.



  • 🤦🏻♂
    Nein.
    Ich meine den Code wo vermutlich ein break; oder return; drinsteht.

    Ernsthaft, ich wundere mich schon darüber wie du annehmen kannst dass man damit was anfangen kann.

    Aber egal. Ich mag hier nicht Detektiv spielen.

    Weisst du wie man deine IDE zum Debuggen verwende? Wenn nein: google es 🙂
    Dann kannst du selbst rausfinden was hier schief geht und warum.


Log in to reply