efizentz vom code



  • bin durch das forum gestreift und habe verschiedens auf geschnapt
    Jetzt habe ich folgendes prob.

    DWORD l1 = pfade.GetLength();
     DWORD l2 = pfade.GetLength();
     for (int i=0; i <l2; i++) // i für stoppwortliste 
    {
      for (int j=0; j<l1; j++) // j für rezept
       {
     	if(out.Find(out.Find(i)) == j )  
    	  {MessageBox("  ");}               
       }
    }
    

    Die MessageBox steht erstmal nur zur kontrolle drin...

    Er soll in dem abschnitt vergleichen ob ein bestimmte Zeile doppelt im Test vorkommt und diese dann später löschen (dazu brauchte ich auch mal einen Tipp)
    Nur leider dauert das sehr lange und aufhängen tut er sich auch dabei. Hat jemand eine bessere Idee.

    Danke



  • Heißen die beiden DWORDs l1 (L-eins) oder 11 (also Elf) und analog?
    Wären es die Zahlen, dann würde mich kein Absturz wundern...

    Erkläre mir bitte die folgende Zeile, dort vermute ich den Fehler:

    if(out.Find(out.Find(i)) == j )
    

    Was soll er da machen?



  • es heisst L1

    if(out.Find(out.Find(i)) == j )
    

    hier soll er schauen ob an der stelle i das gleich wort wie an Stelle j steht



  • Was für ein Typ ist out?

    Wenn das ein CStringArray ist, würde ich es eher so versuchen:

    if (out.GetAt(i) == out.GetAt(j))
    


  • out ist vom Typ CString geht das trotzdem.

    ich werde es mal versuchen..



  • also damit geht es auch nicht

    es tut mehr boxen anzeigen wie nötig.



  • Ich glaube, ich komme mit deinem Ansatz zu keiner Lösung. 😞

    Ich kenne zu wenig von deinem Lösungsweg und wäre es wohl so anders angegangen, dass ich mich jetzt nicht mehr "aufgleisen" kann.

    Außerdem wundert es mich, dass es bei der if mit den Finds keinen Compilerfehler gab... 🙄



  • Ganz ehrlich:

    ich weiss auch nichts mehr mit dem Code anzufangen..

    Also ich habe
    zwei Eingabefelder
    einen Button Hinzufügen

    beim drücken auf hinzufügen

    soll das was in Eingabefeld eins steht unter den Text von 2E gesetzt werden.
    Da der Inhalt von 2E aus einer Textdatei kommt, setzt er den neuen Eintrag zuerst an ende der Textdatei und dann soll verglichen werden ob dieser eintrag schon existiert wenn ja soll der alte gelöscht werden. Dann wird der Text neu ins 2E geladen.

    Wenn du eine bessere und von der performence her bessere idee hast, bitte melden. DAnke



  • Also, als erstes kannst du dir mal ansehen, ob sich statt dem 1E nicht eine CListBox besser anbieten würde.
    Vorteile: Jede Zeile einzeln ansprechbar, nicht editierbar

    Du solltest dir das Edit jedenfalls zeilenweise (wortweise?) ansehen, dann kannst du so arbeiten:
    (Achtung teilweise Pseudocode)
    for (i = 0 bis Ende, i++)
    {
    if (zeile.Find(suchtext) != -1) // Zeile enthält Suchtext
    {
    lösch zeile
    }
    }
    häng suchtext hinten an

    Wenn das ein Edit bleiben soll, guck mal nach, ob dir CString::Replace hilft. 🙂


Anmelden zum Antworten