CString in Array schreiben



  • huhu Leute,
    habe folgendes Problem mit dem ich nicht klar komme, und zwar habe ich in einem funktionierendem Programm folgendes :

    for (int i=0;i<100;i++)
    {
    ...
        nData [i][0] = m_OU;
    }
    

    m_OU ist ein berechneter Wert vom Typ Double

    jetzt wollte ich das in einem anderen Programm anwenden, allerdings sind meine Werte in einem CString hinterlegt(Wert Wert... éin Leerzeichen trennt immer die Werte)...

    Wie um HimmelsWillen bekomme ich denn jetzt die einzelnen Werte in das

    nData [i][0}
    

    ????



  • Wenn da immer ein Leerzeichen dazwischen ist kannst du sie so trennen:

    CString deineZweiWerte = "Wert1 Wert2";
    
    CString wert1 = deineZweiWerte.Left(deineZweiWerte.Find(' '));
    CString wert2 = deineZweiWerte.Right(deineZweiWerte.Find(' ') + 1);
    
    AfxMessageBox(wert1 + wert2);
    


  • und was mache ich, wenn die Anzahl der Werte nicht immer gleich ist???



  • Denken und darauf kommen, dass eine Schleife ganz nützlich sein könnte.



  • Also ersteinmal herausbekommen wieviele ' ' in dem String vorkommen und dann so etwas, wie:

    for (int i=0;i<AnzahlLeerZeichen;i++)
    {
    //nu weiss ich net was ich machen soll...
    }
    


  • Dann schreibst du von Anfang an in deine Frage dass die Werte variieren können damit ich nicht was umsonst mache und löst es folgendermassen:

    CStringArray	   gayrray;
    	CString			deineWerte = "Wert1 Wert2 Wert3 Wert4";
    	int				countSpace = 0;
    
    	for(int i = 0; i < deineWerte.GetLength(); i++) if(deineWerte.GetAt(i) == ' ') countSpace++;
    
    	for(i = 0; i < countSpace; i++)
    	{
    		gayrray.Add(deineWerte.Left(deineWerte.Find(' ')));
    		deineWerte.Delete(0, deineWerte.Find(' ') + 1);
    	}
    
    	gayrray.Add(deineWerte);
    
    	for(i = 0; i < gayrray.GetSize(); i++) AfxMessageBox(gayrray.GetAt(i));
    

    EDIT: Oh, ich seh grad dass da schon n paar Antworten sind. Egal...



  • danke erstmal, dass konnte ich umbiegen... 🙂

    aber noch eine Frage: wenn ich das ganze jetzt zur weiteren
    Verarbeitung einem double weitergeben will, wie muss ich das denn bewerkstellen, er meckerte beim ersten plumpen Versuch:
    class CStringArray kann nicht in double[10000][4] konvertiert werden
    oder kann man die Strings auch in einen DoubleTyp einlesen???

    CStringArray       gayrray;
    //double gay[10000][4];???
    CString            deineWerte = "Wert1 Wert2 Wert3 Wert4";
    int                countSpace = 0;
    for(int i = 0; i < deineWerte.GetLength(); i++) if(deineWerte.GetAt(i) == ' ') countSpace++;
    
    for(i = 0; i < countSpace; i++)
    {
        gayrray.Add(deineWerte.Left(deineWerte.Find(' ')));
        deineWerte.Delete(0, deineWerte.Find(' ') + 1);
    }
    
    gayrray.Add(deineWerte);
    for(i = 0; i < gayrray.GetSize(); i++) AfxMessageBox(gayrray.GetAt(i));
    


  • kann mir mal jemand sagen, wie ich dann array nach double[10000][4] umwandele?



  • HILFEEEEEEEEEEEEEeeeeeeeeeeeeeee 😞
    Ich nochmal, habe das mit dem Array ja hinbekommen, und danke dir dafür.
    Aber bei einer weiteren Berechnung läuft es so ab:

    double m_OU;
    for (int i = 0; i < m_AnzahlBerechnungsschritte; i++)
    {
        ...
        {
            //hier findet die Berechnung von m_OU statt		
        }
        ...
        MyChart.nData[i][0] = m_OU;			
    }
    

    Hier ist es wieder das gleiche, ich habe nicht m_ou zu Verfügung sondern nur einen String(wie oben,in dem steht :Wert1 Wert2 wert3 usw...)
    wie kann ich jetzt, wenn ich es, wie du mit dem Array beschrieben hast mit einem double bewerkstelligen???

    double m_ou;
    int countSpace=0;
    for(int i=0;i<m_AusgabeInput.GetLength();i++) 
    if(m_AusgabeInput.GetAt(i)==' ') countSpace++;
    
    for(i=0;i<countSpace;i++)
        {
    //so war es ja:	gayrray.Add(m_AusgabeInput.Left(m_AusgabeInput.Find(' ')));
    //	          m_AusgabeInput.Delete(0,m_AusgabeInput.Find(' ')+1);
    
    //aber wie kann ich einem double m_ou die einzelnen Stringteile zuweisen???
        MyChart.nData[i][0] = m_OU;
        }
    

    😕 😮



  • schaffe es einfach nich, also bitte ich nochmals um Hilfe 😞
    Habe folgenden Programmteil, den ich ändern will:

    double nData[10000][4];//unter anderem Header
    

    in meinem Teil, wo die Berechnung läuft:

    double m_OU;
    for (int i = 0; i < m_AnzahlBerechnungsschritte; i++)
    {
        ...
        {
            //hier findet die Berechnung von m_OU statt        
        }
        ...
        MyChart.nData[i][0] = m_OU;            
    }
    

    Nur habe ich jetzt keine Berechnung mehr, wo ich in der Schleife m_OU an nData übergeben kann, sondern ich habe einen String, in dem die einzelnen Werte, die woanders berechnet wurden, mit Leerzeichne getrennt drinnen stehen... Ich muss nun also aus dem String die Leerzeichen auslesen, um auf die Anzahl der Berechnungsschritte zukommen, und in jedem Schleifendurchgang meinem MyChart.nData[i][0] = einen Teil zwischen ' ' und ' ' zuweisen, aber wie 😕

    Pulse´s Ansatz

    int countSpace = 0;
    
    for(int i = 0; i < deineWerte.GetLength(); i++) if(deineWerte.GetAt(i) == ' ') countSpace++;
    
    for(i = 0; i < countSpace; i++)
    {
    //und nu weiss ich nicht mehr weiter????
    //    gayrray.Add(deineWerte.Left(deineWerte.Find(' ')));
    //    deineWerte.Delete(0, deineWerte.Find(' ') + 1);
    //  war der Ansatz von pulse, der mit nem CStringArray auch funktioniert, nu 
    //  isses aber double....
    }
    

    habe die suche schon mehrmals gewältzt nach CString double usw, aber was ich finde kann ich nicht umsetzen 😞 wenn nicht schon das ganze Wochenende draufgegangen wäre, wäre ich vielleicht auch besser drauf, und könnte mir den Kopf mehr zerbrechen 😃 Aber dieses Ding bringt mich zur Verzweifelung...
    Erbitte Hilfe 😉



  • Erstelle dir die folgenden Funktionen...

    double deineKlasse::CStringToDouble(CString x)
    {
    	double y;
    	y=atof(x);
    	return y;
    }
    
    CString deineKlasse::DoubleToCString(double x)
    {
    	CString y;
    	y.Format("%lf",x);
    	return y;
    }
    

    wenn du jetz einen CString in ein double wandeln willst gibst du nur noch

    doublevariable=CStringToDouble(CStrinvariable); 
    CStringVariable=DoubleToCString(Doublevariable);
    

    ein.

    mfg, TFTS



  • für dein schleifenproblem mache folgendes:

    CString WertalsCStringeinzeln[1000]; //jetzt dürfen es maximal 1000 Werte sein
    int int_hlp,i;
    for(i=0;i<1000;i++)
    {
       WertalsCStringeinzeln[i] = DeineCStringWerteKette.Left(DeineCStringWerteKette.Find(" ",0));
       int_hlp=WertalsCStringeinzeln.GetLength();
       DeineCStringWerteKette.Delete(0,int_hlp+1);
    
      //hier jetz die CStrinToDouble Funktion benutzen
      double x[i]=CStringToDouble(WertalsCStringeinzeln[i]);
      //nach dem durchlaufen der for schleifen solltest du nun alle werte deiner CString Kette in dem Vektor x[] haben
    
      if(DeineCStringWerteKette=="")
        break;
    }
    

    mfg, TFTS



  • es funtzt erstmal, nur noch schöner machen^^:

    CString WertalsCStringeinzeln[10000]; //jetzt dürfen es 10000 Werte sein 
    int countSpace=0;
    
    for(int i=0;i<m_AusgabeInput.GetLength();i++) if(m_AusgabeInput.GetAt(i)==' ') countSpace++;
    
    for(i=0;i<countSpace;i++) 
    { 
       WertalsCStringeinzeln[i] = m_AusgabeInput.Left(m_AusgabeInput.Find(" ",0)); 
       m_AusgabeInput.Delete(0,m_AusgabeInput.Find(' ')+1); 
    
      //hier jetz die CStringToDouble 
        double y; 
        y=atof(m_AusgabeInput); 
    	y;
    	dlgCChartView.nData[i][0] = y;
    }
    


  • wenn du es so machst kannst du auch das y völlig raushauen:

    CString WertalsCStringeinzeln[10000]; //jetzt dürfen es 10000 Werte sein 
    int countSpace=0;
    
    for(int i=0;i<m_AusgabeInput.GetLength();i++) if(m_AusgabeInput.GetAt(i)==' ') countSpace++;
    
    for(i=0;i<countSpace;i++) 
    { 
       WertalsCStringeinzeln[i] = m_AusgabeInput.Left(m_AusgabeInput.Find(" ",0)); 
       m_AusgabeInput.Delete(0,m_AusgabeInput.Find(' ')+1); 
    
       dlgCChartView.nData[i][0]=atof(WertalsCStringeinzeln[i]); 
    }
    

    du hattest übrigens den fehler dass du m_AusgabeInput in eine double umgewandelt hast, aber es müsste eigentlich WertalsCStringeinzeln[i] sein.


Anmelden zum Antworten