Newsgroup: it.comp.lang.delphi
Titolo: Conteggio righe StringGrid

La funzione di cui sotto mi calcola il numero delle righe di una StringGrid
fino a quando non trova la prima riga vuota(if StringGrid.Cells[4, Row] = ' 
' )ora
vorrei invece fermare il conteggio fino a quando per esempio nella colonna 4
vi sia il valore 'sergio' ((if StringGrid.Cells[4, Row] = 'sergio' ).
Solo che inserendo sergio mi da' errore,in pratica vorrei un conteggio 
condizionato.
In alternativa vorrei sapere se e' possibile usare la funzione Lookup su una 
StringGrid
Grazie per la risposta
Paolo.
function CountRows(StringGrid: TStringGrid): Integer;
var
 Row: Integer;
begin
  for Row := StringGrid.FixedRows to StringGrid.RowCount - 1 do
  begin
   if StringGrid.Cells[4, Row] = ' ' then
    begin
     Result := Row - 1;
      Exit;
    end;
  end;
  Result := StringGrid.RowCount - 1;
end; 

Hai già provato con andrea ?
E magari con uppercase(X)=uppercase(lowercase('ANDREA'));
per essere più esatto col compilatore.
Ciao
--- posted by geoForum on 
http://www.delphiedintorni.it


Che vuol dire che da' errore? Spiegati meglio.
Non mi pare che il codice riportato sia formalmente errato, ed ancor 
meno che possa restituire errore se la ricerca viene condizionata dalla 
presenza di un testo come "sergio"; tuttalpiù, non riconosce la 
concordanza tra stringhe e passa oltre...
Per essere ancor più sicuro di quanto detto dal Pini, io ci aggiungerei 
un Trim() per eliminare eventuali spazi.
Quindi
   if UpperCase(Trim(StringGrid.Cells[4, Row])) = 'SERGIO' 
DEVE funzionare...
NioBi


Ti ringrazio per la risposta,la cosa non funzionava perche' la stessa 
funzione era richiamata in un due punti diversi del codice,ho risolto 
creando un'altra funzione con una piccola modifica.
Per quanto riguarda il filtraggio di una Stringgrid,volevo solo sapere se 
era possibile direttamente senza il TTable,ma qui mi dicono che non e' 
possibile.
Grazie
Paolo 

Avete mai provato a dare un'occhiata all'help di Delphi > 1.0? :-)
Avete mai provato ad usare funzioni come SameText, CompareText e 
AnsiCompareText, che sono già case-insensitive? :-)
 
La uppercase di una lowercase poi vorrei proprio capirla...


possibile.
- Usi un TClientDataset
- Usi una delle tante memory table che trovi in giro (es. KMemTable)
- Aggiungi la funzione lookup in un derivato di TStringGrid... ;-)
- Usi una griglia un po' piů potente della string grid


P.S. Non riesco a inviarti la Email in privato,pertanto la mando al 
newgroup.
Caro amico,ti ringrazio per la disponibilta' dimostrata riguardo a mie
domande sul newgroup di delphi,vorrei passare subito al dunque,
il codice di cui e' solo uno spezzone da me selezionato(Non e' farina del
mio sacco) che mi
include in una lista un numero fissato di giocatori per poi elaborare dei
turni di
un torneo scacchistico,esempio 8 giocatori.
Ora io vorrei escludere dalla lista i giocatori che in un determinato turno
non giocano,per esempio il n.3 e il n.5
L'algoritmo mi dovrebbe prendere pertanto i giocatori 1-2-4-6-7-8
Il termine PresenteGioc e' un valore boolean che se fissato a True sta ad
indicare che il giocatore e' disponibile per il turno,quello che non riesco
a fare e'
escludere dalla lista tutti i giocatori False (per il momento bisogna
escluderli in numero
di due a due perche' il programma non accetta un numero dispari di
giocatori.)
O meglio,se li escudo c'e' un errore che dice che non trova(giustamente) i
giocatori 3 e 5,
praticamente vorrei che l'algoritmo saltasse di elaborare il 3 e il 5,ma
nello stesso
tempo mi elaborasse i rimanenti.
So che sono stato molto poco chiaro,se tu ti consideri competente e
se sei in grado di darmi una dritta(vi sono di mezzo degli array)
ti posso mandare tutto il codice sorgente scritto in delphi7 e naturalmente
l'eseguibile del programma
in modo di avere le cose un po' piu' chiare.
Aggiungo che sono disposto a pagarti senza problema se riesci a ottenere
qualcosa
che mi risolva la cosa.
Grazie
Paolo
procedure InitPairing;
var
 i: ExtGiocRange;
begin
 AllPlayers := [];
  for i := 1 to NGiocatori do    /// Qui prende per esempio 8 giocatori
   if Giocatori[i].PresenteGioc then     //valore Boolean
    Include(AllPlayers, i);        //da come ho capito include gli 8
giocatori,io vorrei includerne successivamente
solo 6 (senza pero' escludendo dalle altre elaborazioni TUTTI e 8 i
giocatori!!!    ////
  for i := 1 to NGiocatori do
  begin
   with Giocatori[i] do
    begin
     //player may not play itself!
     AvversariDisponibili := AllPlayers

    begin
Ma qui non lo usi!!!
Potresti aggiungere: 
if I in AllPlayers then
Comunque io costruirei una seconda lista con solo i giocatori 
disponibili e opererei su quella.
