Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: alexarmato66 - Maggio 14, 2023, 04:55:59 pm

Titolo: RISOLTO Celle copiate da Excel in una StringGrid
Inserito da: alexarmato66 - Maggio 14, 2023, 04:55:59 pm
Ho copiato delle celle vuote da Excel in una StringGrid ma Lazarus non
riconosce tali celle come vuote
Ho scritto il seguente codice ma non funziona:
Codice: [Seleziona]
for i:=2 to 17 do     // da riscrivere

begin
for j:= 1 to StringGrid6.RowCount-1 do
begin
if StringGrid6.Cells[i,j]='' then
  begin
  StringGrid6.Cells[i,j]:= '0';

  end;
 end;
end;                 

Se invece manualmente  ,dopo aver copiato le celle in una StringGrid, le cancello con il comando Canc tutto funziona.
Come dovrei modificare il codice?
Titolo: Re:Celle copiate da Excel in una StringGrid
Inserito da: bonmario - Maggio 14, 2023, 05:53:19 pm
Secondo me, fai prima a mettere in debug, e vedere il contenuto della cella.
Appena prima di "if StringGrid6.Cells[i,j]='' then", copi il valore di quella cella in una variabile di tipo stringa e ne verifichi il valore.

Ciao, Mario
Titolo: Re:Celle copiate da Excel in una StringGrid
Inserito da: giacomarko - Maggio 14, 2023, 06:37:24 pm
Magari cella "vuota" non significa "null".
Titolo: Re:Celle copiate da Excel in una StringGrid
Inserito da: DragoRosso - Maggio 14, 2023, 07:47:22 pm
Prova ad usare la funzione Trim:

Codice: [Seleziona]
if Trim(StringGrid6.Cells[i,j]) = ''  then
Titolo: Re:Celle copiate da Excel in una StringGrid
Inserito da: alexarmato66 - Maggio 14, 2023, 09:11:19 pm
Grazie ragazzi , ma non sono ancora riuscito nell'impresa. Ho provato anche con il consiglio di Mario
ma senza risultati. Non è grave ma volevo scoprire come mai avviene questa diavoleria. :)
Titolo: Re:Celle copiate da Excel in una StringGrid
Inserito da: Stilgar - Maggio 14, 2023, 11:23:19 pm
Ciao.
hai provato a "stampare" a console cosa trovi nelle celle?


La butto lì.
Magari ci sono dei codici di controllo, se fai copia e incolla nella StringGrid.


Stilgar

Titolo: Re:Celle copiate da Excel in una StringGrid
Inserito da: brunello - Maggio 15, 2023, 08:00:29 am
se all'interno della cella ci sono dei caratteri non visualizzabili il trim non li esclude, è meglio che consideri la lunghezza della stringa che se vuota deve essere zero con length(StringGrid6.Cells[i,j])
Titolo: Re:Celle copiate da Excel in una StringGrid
Inserito da: DragoRosso - Maggio 15, 2023, 10:10:03 am
Attenzione a fare valutazioni sui codici di controllo: il formato generalmente usato dai prodotti Microsoft quale è ?
Come tipologia di formato, si deve adattare a contenere tutti i caratteri (compresi caratteri con accenti e umlaut) anche di varie lingue, quindi probabilmente è un UTF-8.

Quindi significa che la tua cella avrà caratteri a singolo byte se sono solo ANSI (numeri e lettere inglesi), e anche multibyte se ci saranno caratteri diversi.

Quindi in linea teorica dovresti trattare il contenuto come se ci fossero caratteri UTF-8, il semplice "char" per puntare ad un carattere potrebbe non bastare (idem ovviamente per l'indicizzazione della stringa).

E' solo una "divagazione" sull'argomento, ma che vale la pena fare visto che tratti stringhe da fonti "diverse".

Ciao
Titolo: Re:Celle copiate da Excel in una StringGrid
Inserito da: alexarmato66 - Maggio 18, 2023, 01:39:19 pm
ho provato a misurare la lunghezza con length.Risultato 2 senza vedere ovviamente nessun carattere.
Titolo: Re:Celle copiate da Excel in una StringGrid
Inserito da: bonmario - Maggio 18, 2023, 02:02:53 pm
Probabilmente è un carattere UTF8 che non riesce a visualizzare.
Prova, solo per questo progetto, ad usare come debugger FPDebug al posto di GDB.
Se metti in watch la variabile in cui copi la cella, dovresti vederne il contenuto

Ciao, Mario
Titolo: Re:Celle copiate da Excel in una StringGrid
Inserito da: DragoRosso - Maggio 18, 2023, 02:30:50 pm
$0d$0a ?

Forse in una cella vuota vengono inseriti i LF/CR ? Probabilmente è una caratteristica di Excel, con LibreOffice le celle copiate risultano "" (vuote).
Titolo: Re:Celle copiate da Excel in una StringGrid
Inserito da: Stilgar - Maggio 18, 2023, 02:32:33 pm
La trim segherebbe quei caratteri...
Se stampa in console i codici, in esadecimale, si potrebbe capire cosa sta rompendo l'anima.


Stilgar
Titolo: Re:Celle copiate da Excel in una StringGrid
Inserito da: alexarmato66 - Maggio 19, 2023, 09:15:56 pm
ho risoltpo con questa funzione:
Codice: [Seleziona]
 FUNCTION IsNumeric(s: STRING): boolean;
VAR
  i: integer;
BEGIN
//TODO:Replace ',' with Systemdelemiter
  Result := (length(s) > 0);
  FOR i := 1 TO length(s) DO
    IF NOT ((Char(s[i]) IN ['0'..'9']) or (Char(s[i]) = DecimalSeparator)
or (Char(s[i]) = '-') or (Char(s[i]) = '+')) THEN
      BEGIN
        Result := False;
        exit;
      END;
END;
Titolo: Re:Celle copiate da Excel in una StringGrid
Inserito da: Stilgar - Maggio 19, 2023, 09:22:25 pm
Hai provato ad usare
Function IndexOfAny(const AnyOf: array of Char): SizeInt; overload; 


Di StringHelper?


Magari ti evita quel NOT e il ciclo.


Altrimenti puoi provare a convertila brutalmente in un numero con


Class Function ToSingle(const S: string): Single


Sono tutte nella StringHelper.


Prova a vedere se ci sono metodi che ti possono aiutare.


Stilgar
Titolo: Re:RISOLTO Celle copiate da Excel in una StringGrid
Inserito da: alexarmato66 - Maggio 19, 2023, 09:33:39 pm
grazie, siete fenomenali!!!
Titolo: Re:RISOLTO Celle copiate da Excel in una StringGrid
Inserito da: DragoRosso - Maggio 19, 2023, 10:39:36 pm
Puoi provare allora:

Codice: [Seleziona]
var p: double;

if tryStrtoFloat(stringa, p) then
  begin
     //qui hai il valore contenuto nella stringa nella variabile p, sempre che sia un valore numerico
  end;
Titolo: Re:RISOLTO Celle copiate da Excel in una StringGrid
Inserito da: Stilgar - Maggio 19, 2023, 10:42:19 pm
grazie, siete fenomenali!!!


Prego.
Il forum serve per dare degli spunti e ad aiutare.


Stigar
Titolo: Re:RISOLTO Celle copiate da Excel in una StringGrid
Inserito da: alexarmato66 - Maggio 20, 2023, 08:46:21 am
Un'altra idea di un mio amico è quella di settare la StringGrid in modo che accetti solo numeri.Non so se esista questa proprietà.
Titolo: Re:RISOLTO Celle copiate da Excel in una StringGrid
Inserito da: Stilgar - Maggio 20, 2023, 09:06:09 am
Dovresti mettere in campo un controllo sulle celle.
Non credo ci sia di suo.


Poi dipende da quello che stai cercando di fare.


Stilgar