If-Abfrage IndexOf funktioniert nicht...



  • Hi,

    ich will mit einer If-Abfrage herausfinden ob in der Whileschleife ein bestimmter Befehl bereits hinzugefügt ist...ich komme aus der VB & Delphiwelt und habe da so einige Grundkenntnisse miteinfließenlassen, allerdings funktioniert das nicht ganz so wie ich will...

    CString strLocalText;
    strLocalText = [22 CHarge/Serie];
    
    CString strLeft;
    CString strRight;
    CString strAnz=S.GTM("Anz.",nSprache);
    CString strDat=S.GTM("Ablaufdatum",nSprache);
    Cstring strLocalText2;
    CString strLTTemp=strLocalText;
    strLocalText="";
    strlocaltext2=""
    if(strLTTemp.GetLength()>0){
    while(strLTTemp.GetLength()>0){
      CString strLTLine=H.ExtractFirstLine(strLTTemp);
      if(strLTLine.GetLength()>0){
         CString strLotNr=H.ExtractFirstElementFromLine(strLTLine,":");
         CString strAnz2=H.ExtractFirstElementFromLine(strLTLine,":");
         CString strDat2=H.ExtractFirstElementFromLine(strLTLine,":");
         strAnz2.TrimLeft();
         strDat2.TrimLeft();
    
         strLocalText2=strLocalText + strLotNr + "   ";
         if(strAnz2.GetLength()>0){strLocalText2=strLocalText2 + strAnz + ":" + strAnz2 +"   ";};
          if(strDat2.GetLength()>0){strLocalText2=strLocalText2 + strDat + ":" + strDat2;};
    };
    strLocalText2=strLocalText2 + "\r\n";
    
    int ind = strlocaltext2.IndexOf(S.GTM("Serien-/Chargennummer",nSprache));
    if (ind > -1)
    {}
    else
    {
    strLocalText2=S.GTM("Serien-/Chargennummer",nSprache) + ":" + strLocalText2;
    }
    
    };
    strlocaltext=strlocaltext2;
    };
    

    Dieser Code ergibt logischerweise einen Fehler...für euch logisch...für mich nihct 😉

    Ich habe zwei Seriennummern, die das Programm ausgeben soll, ich hatte stehen:

    };
    strLocalText2=strLocalText2 + "\r\n";
    strLocalText2=S.GTM("Serien-/Chargennummer",nSprache) + ":" + strLocalText2;
    };
    strlocaltext=strlocaltext2;
    };
    

    Statt:

    strLocalText2=strLocalText2 + "\r\n";
    
    int ind = strlocaltext2.IndexOf(S.GTM("Serien-/Chargennummer",nSprache));
    if (ind > -1)
    {}
    else
    {
    strLocalText2=S.GTM("Serien-/Chargennummer",nSprache) + ":" + strLocalText2;
    }
    
    };
    strlocaltext=strlocaltext2;
    };
    

    Dann kam folgendes dabei heraus:

    SerialNumber: SerialNumber:090010090 Qty: 1 Exp.Date: 12.12.2012
    090010091 Qty: 4 Exp.Date 13.12.2012

    Ich hätte gerne ohne großen Aufwand das folgendes steht:

    SerialNumber: ..... Qty: ... Exp.Date: ...
    SerialNumber: ..... Qty: ... Exp.Date: ...

    Wie kann man das auf einfachstem Weg lösen? Bitte um Hilfe 🙂

    Danke aus dem kalten und mitternächtlichem Österreich!



  • nimm mal cpp-tags und rück ordentlich ein...
    dann könnte man dir so gar vermutlich in diesem(für dich vermutlich falschen^^) subforum helfen 😉

    bb



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hi,

    ich will mit einer If-Abfrage herausfinden ob in der Whileschleife ein bestimmter Befehl bereits hinzugefügt ist...ich komme aus der VB & Delphiwelt und habe da so einige Grundkenntnisse miteinfließenlassen, allerdings funktioniert das nicht ganz so wie ich will...

    CString strLocalText;
    strLocalText = [22 CHarge/Serie];
    
    CString strLeft;
    CString strRight;
    CString strAnz=S.GTM("Anz.",nSprache);
    CString strDat=S.GTM("Ablaufdatum",nSprache);
    Cstring strLocalText2;
    CString strLTTemp=strLocalText;
    strLocalText="";
    strlocaltext2=""
    if(strLTTemp.GetLength()>0){
    while(strLTTemp.GetLength()>0){
      CString strLTLine=H.ExtractFirstLine(strLTTemp);
      if(strLTLine.GetLength()>0){
         CString strLotNr=H.ExtractFirstElementFromLine(strLTLine,":");
         CString strAnz2=H.ExtractFirstElementFromLine(strLTLine,":");
         CString strDat2=H.ExtractFirstElementFromLine(strLTLine,":");
         strAnz2.TrimLeft();
         strDat2.TrimLeft();
    
         strLocalText2=strLocalText + strLotNr + "   ";
         if(strAnz2.GetLength()>0){strLocalText2=strLocalText2 + strAnz + ":" + strAnz2 +"   ";};
          if(strDat2.GetLength()>0){strLocalText2=strLocalText2 + strDat + ":" + strDat2;};
    };
    strLocalText2=strLocalText2 + "\r\n";
    
    int ind = strlocaltext2.IndexOf(S.GTM("Serien-/Chargennummer",nSprache));
    if (ind > -1)
    {}
    else
    {
    strLocalText2=S.GTM("Serien-/Chargennummer",nSprache) + ":" + strLocalText2;
    }
    
    };
    strlocaltext=strlocaltext2;
    };
    

    Dieser Code ergibt logischerweise einen Fehler...für euch logisch...für mich nihct 😉

    Ich habe zwei Seriennummern, die das Programm ausgeben soll, ich hatte stehen:

    };
    strLocalText2=strLocalText2 + "\r\n";
    strLocalText2=S.GTM("Serien-/Chargennummer",nSprache) + ":" + strLocalText2;
    };
    strlocaltext=strlocaltext2;
    };
    

    Statt:

    strLocalText2=strLocalText2 + "\r\n";
    
    int ind = strlocaltext2.IndexOf(S.GTM("Serien-/Chargennummer",nSprache));
    if (ind > -1)
    {}
    else
    {
    strLocalText2=S.GTM("Serien-/Chargennummer",nSprache) + ":" + strLocalText2;
    }
    
    };
    strlocaltext=strlocaltext2;
    };
    

    Dann kam folgendes dabei heraus:

    SerialNumber: SerialNumber:090010090 Qty: 1 Exp.Date: 12.12.2012
    090010091 Qty: 4 Exp.Date 13.12.2012

    Ich hätte gerne ohne großen Aufwand das folgendes steht:

    SerialNumber: ..... Qty: ... Exp.Date: ...
    SerialNumber: ..... Qty: ... Exp.Date: ...

    Wie kann man das auf einfachstem Weg lösen? Bitte um Hilfe 🙂

    Danke aus dem kalten und mitternächtlichem Österreich!

    PS: Danke für den Tipp unskilled!



  • Ist wohl eher C#. In MFC/CString gibt's kein IndexOf.



  • Danke für das Feedback, soll ich das selber irgendwie nochmal ins richtige Forum schreiben oder kann man das ausnahmsweise hier stehen lassen?

    Auf jeden Fall danke für deine Antwort, bin über jegliche Rückmeldungen dankbar 🙂

    Liebe Grüße
    Daniel



  • Ich hab im Netz die find() Funktion gefunden...

    Wie kann man die richtig einbauen?

    lg
    Daniel


  • Mod

    Sag doch mal lieber was das Ding soll!

    Was kommt rein. Was soll unter welchen bedingungen umgewandelt werden.

    Mit scheint, dass Du die Ersetzung in der Schleife machen musst und nicht außerhalb.



  • Wir geben ins Programm die Seriennummer, Verfallsdatum und Anzahl ein...

    Es kann sein, dass es zwei Seriennummern für einen Artikel gibt, dann soll das Ganze zweizeilig werden,

    Was mit dem hier funktioniert:

    };
    strLocalText2=strLocalText2 + "\r\n";
    };
    strLocalText2=S.GTM("Serien-/Chargennummer",nSprache) + ":" + strLocalText2;
    strlocaltext=strlocaltext2;
    };
    

    Dann sieht das wie folgt aus:
    Serien/-Chargennummer: xyxyxy Qty: 2 Exp.Date: 12/2012
    xyxyxy Qty: 5 Exp.Date: 12/2013

    Ich will allerdings, dass das ganze folgendermaßen aussieht:

    Serien/-Chargennummer: xyxyxy Qty: 2 Exp.Date: 12/2012
    Serien/-Chargennummer: xyxyxy Qty: 5 Exp.Date: 12/2013

    Aufgrunddessen habe ich mir gedacht, dass ich es in der Schleife mit einem IF mache um zu checken, ob Serien/-Chargennummer schon in strLocalText2 steht...

    Ich hoffe das hilft dir und weiterfolgend auch mir weiter!

    LG Daniel


  • Mod

    Ich verstehe gar nicht was Du willst.

    Dein String wird doch hier in der Schleife erst zusmamengebaut.
    Warum ersetzt Du die texte nicht, wenn Du sie als einzelnen Token hast.

    Ansonsten ist die Art und Weise wie Du hier mit den Variablem umgehst abslut unverständlich.
    Ich hatte Dich gefragt was für Daten Du bekommst, damit man sich mal vorstellen kann, was diese Funktion eigentlich tut. (Wa sist H? Was liefert ExtractFirstElementFromLine? etc.)



  • H ist eine Horizontale im Programm

    Man gibt alles Notwendige folgendermaßen ein:

    xxxxx::12/2012

    und die Menge steht ein Feld zuvor, daher gibt man das mit :: ein...weil bis zum ersten : ist es die Seriennummer bis zum zweiten die Menge und ab dem dritten ist es dann das Datum...

    und es kann natürlich vorkommen, dass wir auch eine zweite Zeile haben bzw. für ein Produkt noch eine zweite Seriennummer...

    dann gibt man das folgendermaßen ein:

    xxxxx::12/2012 xxxxy::12/2013

    Es kann allerdings auch sein, dass man dann die Mengenangabe reinschreiben muss (sonst wird sie aus einem anderen Feld genommen)...

    xxxx:4:12/2012 xxxy:1:12/2013

    und das ist dann H.ExtractFirstElementFromLine

    und wenn ich nun 2 von diesen Seriennummern habe, dann würde ich das als Endergebnis auch gerne in zwei Reihen stehen haben...

    Geht das?

    Danke auf jeden Fall, dass du so geduldig bist mit mir und nicht schon längst einen Ausraster hast 🙂


Log in to reply