Seiten berechnen



  • Wie meinst Du das mit

    (startIndex % vCount +1)*2-1
    

    ?

    ...in welche Zeile soll das?



  • realdarkman71 schrieb:

    Wie meinst Du das mit

    (startIndex % vCount +1)*2-1
    

    ?

    ...in welche Zeile soll das?

    Nein, das war nur ein Vorschlag wie du die Seite herausfinden kannst.
    Wo und wie du es einsetzen willst, das ist ganz dir überlassen.



  • Welche Seite herausfinden? start? Der Code ergibt bei mir immer 3, egal wie hoch startIndex und vCount sind!?



  • realdarkman71 schrieb:

    Wenn er jetzt das erste Mal 200 Sätze Daten abrufen möchte, ist startIndex = 1 und count = 200, beim zweiten Abruf ist startIndex = 201 und dann 401, 601, 801 usw. count bleibt ja 200.

    Warum fängt der startIndex nicht bei 0 an?

    Was willst du jetzt herausfinden, die Seitenzahl?

    Und wie verhält das sich, wenn ich erst 350 Sätze abrufe (3,5 Seiten). Kommen die Sätze des nächsten Abrufs dann auf die nächste Seite oder wird die halbe Seite erst noch vollgepackt?



  • realdarkman71 schrieb:

    Welche Seite herausfinden? start? Der Code ergibt bei mir immer 3, egal wie hoch startIndex und vCount sind!?

    Ou sorry, ich meinte startIndex / Count!

    (startIndex / vCount +1)*2-1
    


  • fdfdg schrieb:

    Warum fängt der startIndex nicht bei 0 an?

    Ich habe noch eine andere Routine, die braucht immer als startIndex die 1 und ich wollte das das gleich bleibt!

    fdfdg schrieb:

    Was willst du jetzt herausfinden, die Seitenzahl?

    Und wie verhält das sich, wenn ich erst 350 Sätze abrufe (3,5 Seiten). Kommen die Sätze des nächsten Abrufs dann auf die nächste Seite oder wird die halbe Seite erst noch vollgepackt?

    Das muss dann so aussehen:

    Erster Aufruf (startIndex=1, vCount=350):

    page: 1 limit: 100
    page: 2 limit: 100
    page: 3 limit: 100
    page: 4 limit: 50

    Zweiter Aufruf (startIndex=351, vCount=350):

    page: 5 limit: 100
    page: 6 limit: 100
    page: 7 limit: 100
    page: 8 limit: 50

    Dritter Aufruf (startIndex=701, vCount=350):

    page: 9 limit: 100
    page: 10 limit: 100
    page: 11 limit: 100
    page: 12 limit: 50

    usw.

    Die Routine soll das alles berechnen und die Daten entsprechend abrufen! Funktioniert ja auch soweit, nur manchmal ruft die Routine noch eine zusätzliche Seite mit limit:0 ab ... und dann stimmt das mit den nächsten Seiten beim darauf folgenden Aufruf nicht mehr!



  • Also dann

    inline void list(const int vCount) {
    
        int count=vCount;
        short limit;
        static int startIndex(1);
    
        while((startIndex-1)%100 != 0)
            ++startIndex;
    
        for(;count>0;count-=100){
    
            limit=(count>=100)?100:counter;
            std::cout<<"page: "<<startIndex/100+1<<"   limit: "<<limit<<std::endl;
            startIndex+=100;
        }
    }
    

    Oder wie?



  • Hm, einfach so?: (Ausgabe)

    #include <iostream>
    
    class Class {
    	static const int ELEMS_PER_PAGE = 100;
    
    	public:
    		Class() : startIndex(1), page(1) {
    		}
    
    		void list( int count ) {
    			std::cout << "list: startIndex=" << startIndex << ", page=" << page << ", count=" << count << "\n";
    
    			while ( count > 0 ) {
    				int elems = std::min( count, ELEMS_PER_PAGE );
    				count -= elems;
    
    				// elems Elemente auf Seite page ab Index startIndex
    				std::cout << "page: " << page << " limit: " << elems << "\n";
    
    				startIndex += elems;
    				++page;
    			}
    		}
    
    	private:
    		int startIndex;
    		int page;
    };
    
    int main() {
    	Class cl;
    	cl.list( 350 );
    	cl.list( 330 );
    	cl.list( 350 );
    }
    


  • Ja genau so, nur ohne private Variablen (wie page und startIndex), das sollte alles in dieser einen Routine ablaufen:

    void Class::list(const int startIndex, const int vCount)
    

    ...und Class ist nur ein Platzhalter!



  • realdarkman71 schrieb:

    Ja genau so, nur ohne private Variablen (wie page und startIndex), das sollte alles in dieser einen Routine ablaufen

    Das kann doch gar nicht funktionieren. Start-Index wolltest du ja ursprünglich als Parameter übergeben, das passt dann dafür.

    Die aktuelle Seite kannst du dir aber nicht errechnen, wenn du nur den Start-Index hast.



  • Ist mir auch gerade klar geworden, habe page jetzt als private implementiert!

    Habe es mit vielen Werten für vCount probiert, Ergebnis war immer korrekt ... die Routine sollte jetzt funktionieren wie sie soll!

    Vielen Dank für Eure Hilfe!!! 😃

    Gruß
    Chris



  • Und mach die Parameter nicht const. Das ist 1.) ein Implementierungsdetail und 2.) Verwirrt nur.


Anmelden zum Antworten