Seiten berechnen
-
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: 50Zweiter Aufruf (startIndex=351, vCount=350):
page: 5 limit: 100
page: 6 limit: 100
page: 7 limit: 100
page: 8 limit: 50Dritter Aufruf (startIndex=701, vCount=350):
page: 9 limit: 100
page: 10 limit: 100
page: 11 limit: 100
page: 12 limit: 50usw.
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.