Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: alexarmato66 - Novembre 21, 2023, 08:20:02 am

Titolo: RISOLTO_Caricare txt in una StringGrid
Inserito da: alexarmato66 - Novembre 21, 2023, 08:20:02 am
Buondė,
Qualcuno avrebbe un esempio di come caricare PIų file di testo CONTEMPORANEAMENTE in una StringGrid?
I campi dei file di testo sono separati da virgole.
Allego due file di esempio
Grazie.
Titolo: Re:Caricare txt in una StringGrid
Inserito da: xinyiman - Novembre 21, 2023, 08:28:05 am
Codice: [Seleziona]
//Funzione che ti restituisce il contenuto del file
function MyLoadFromFile(filename : string) : string;
var
    app : TStringList;
    ret : string;
begin
        if FileExists(filename) then
        begin
              app := TStringList.Create;
              app.LoadFromFile(filename);
              ret := app.text;
              app.Free;
              app:=nil;
        end else begin
              ret := '';
        end;
        result := ret;
end;

//nel tuo sorgente usi la funzione cosė
var testo : string;

...

testo := '';
testo := testo + MyLoadFromFile('nome_file1_con_percorso.txt') + System.LineEnding;
testo := testo + MyLoadFromFile('nome_file2_con_percorso.txt') + System.LineEnding;
...
testo := testo + MyLoadFromFile('nome_fileN_con_percorso.txt') + System.LineEnding;

Spero l'esempio sia chiaro.
Titolo: Re:Caricare txt in una StringGrid
Inserito da: alexarmato66 - Novembre 22, 2023, 11:47:57 am
ho risolto cosė:
Codice: [Seleziona]
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Grids, StrUtils,math;

type
  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    StringGrid1: TStringGrid;
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
const
  MAX_RIGHE = 50;
  MAX_COLONNE = 7;

var
  riga, colonna, rigaInStringGrid: Integer;
  valore: string;
  i: Integer;
  fileToRead: TextFile;
  selectedFile: string;
  colonne: TStringArray;

begin
  // Creare TOpenDialog dinamicamente
  with TOpenDialog.Create(nil) do
  try
    Title := 'Seleziona file di testo';
    Filter := 'File di testo (*.txt)|*.txt';
    Options := [ofAllowMultiSelect];

    { Mostra la finestra di dialogo e leggi i file selezionati }
    if Execute then
    begin
      rigaInStringGrid := 2;  // Inizia dalla prima riga nella StringGrid

      for i := 0 to Files.Count - 1 do
      begin
        selectedFile := Files[i];

        AssignFile(fileToRead, selectedFile);
        Reset(fileToRead);

        riga := 1;
        while not Eof(fileToRead) and (riga <= MAX_RIGHE) do
        begin
          ReadLn(fileToRead, valore);

          // Utilizza SplitString per separare il testo in singole colonne
          colonne := SplitString(valore, ',');

          // Assegna i valori alle celle della StringGrid
          for colonna := 1 to Min(MAX_COLONNE, Length(colonne)) do
            StringGrid1.Cells[colonna , rigaInStringGrid -1] := colonne[colonna-1 ];

          Inc(riga);
          Inc(rigaInStringGrid);
        end;

        CloseFile(fileToRead);

         end;
    end;
  finally
    Free;  // Liberare la memoria del TOpenDialog
  end;

  // Chiamata necessaria per far funzionare l'applicazione
  Application.Run;
end;


end.