Carregar String Grid com valores de Lista

20/04/2020

0

Olá a todos!

Sou novato em Delphi e estou precisando de uma ajuda para fazer uma planilha ou carregar um Strig Grid com valores vindos de um arquivo TXT onde o mesmo possui a seguinte sequencia:

Data ESPAÇO Hora ESPAÇO Pressão ESPAÇO Vazão

EX: 29/06/2018 16:45:37 26,6 0,000

Gostaria de apresentar o Número de pontos, Data, Hora, Valor da Pressão e Valor da Vazão

Nº de Pontos Data Hora Pressão (mca) Vazão (m3/h) Totalizador (m3)
1 20/04/2020 09:25:08 33,0 2,048 0,000
2 20/04/2020 09:30:08 32,0 2,052 0,035
3... 20/04/2020 09:35:08 33,0 2,048 0,053

Por enquanto está mostrando dados por ListBox e Gráfico TChart.

OBS: Demora muito para carregar e criar o gráfico também!

Alguém me sugere como fazer ou mostrar um exemplo?

procedure TF_Grafico.Botao_AbrirClick(Sender: TObject);
var
ArqTxt : TextFile;
linha : string;
Coluna: TStringList;
I: Integer;
begin
Chart1.Title.Text.Clear; // Limpa Texto do Gráfico
Chart1.Series[0].Clear; // Limpa o Gráfico 0
Chart1.Series[1].Clear; // Limpa o Gráfico 1
DataHora := ''''''''''''''''; // Limpa a Variável DataHora
DataHoraInicio := '''''''''''''''';
DataHoraTermino := '''''''''''''''';

if OpenDialog1.Execute then // Abre Diretório do Arquivo
if Application.MessageBox(''''''''Deseja Realmente Carregar o Arquivo Selecionado?'''''''',pchar(application.title),+MB_ICONQUESTION+MB_YESNO+MB_DEFBUTTON1) = id_yes then
begin
// Cria um array dinâmico
Coluna := TStringList.Create;
AssignFile(ArqTxt,OpenDialog1.FileName); // Abrir o arquivo
Reset(ArqTxt); // Reseta o Arquivo txt
X := 0; // Carrega a Variável X com 0
Readln(ArqTxt, Linha); // Leitura da Linha do Arquivo txt
DataHoraInicio:= DataHoraInicio + copy(linha, 1, 19); // Copia a Data e Hora Inicial das Coletas na Linha do Arquivo txt
Reset(ArqTxt); // Reseta o Arquivo txt
Chart1.Title.Text.Add(OpenDialog1.FileName); // Carrega a Variável Chart1 com o Nome do Arquivo
while not eof(ArqTxt) do // Aguarda Leitura do Arquivo até a última linha
begin
Readln(ArqTxt, Linha); // Leitura da Linha do Arquivo txt
listbox1.Items.add(linha); // Copia a Linha do Arquivo txt
for I := 0 to ListBox1.Items.Count - 1 do // Efetua a Leitura de Linha a Linha
begin
Coluna.Text := StringReplace(ListBox1.Items.Strings[I], '''''''' '''''''', #13, [rfReplaceAll]); // Carrega a Variável Coluna com os Itens e Valores da Linha
end;

DataHora := DataHora + copy(linha, 1, 19); // Copia a Data e Hora da Linha do Arquivo txt
PressaoY := Coluna[2]; // Copia a Pressão da Linha do Arquivo txt
VazaoY := Coluna[3]; // Copia a Vazão da Linha do Arquivo txt

chart1.Series[1].AddXY(X, StrToFloat(PressaoY), FormatDateTime(''''''''DD''''''''+''''''''/''''''''+''''''''MM''''''''+''''''''/''''''''+''''''''YY''''''''+'''''''' ''''''''+''''''''HH''''''''+'''''''':''''''''+''''''''NN''''''''+'''''''':''''''''+''''''''SS'''''''', StrToDateTime(DataHora)),1); // Plota o Gráfico da Pressão
chart1.Series[0].AddXY(X, StrToFloat(VazaoY), FormatDateTime(''''''''DD''''''''+''''''''/''''''''+''''''''MM''''''''+''''''''/''''''''+''''''''YY''''''''+'''''''' ''''''''+''''''''HH''''''''+'''''''':''''''''+''''''''NN''''''''+'''''''':''''''''+''''''''SS'''''''', StrToDateTime(DataHora)),1); // Plota o Gráfico da Vazão

DataHora := ''''''''''''''''; // Limpa a Variável DataHora
PressaoY := ''''''''''''''''; // Limpa a Variável PressaoY
VazaoY := ''''''''''''''''; // Limpa a Variável VazaoY
Inc(X); // Incrementa o Eixo X do Gráfico
Edit6.Text := MaiorVazao; // Mostra Maior Vazão
Edit4.Text := MenorVazao; // Mostra Menor Vazão
Edit3.Text := MaiorPressao; // Mostra Maior Pressão
Edit1.Text := MenorPressao; // Mostra Menor Pressão
end;

Edit7.Text := ''''''''Canal 1''''''''; // Apresenta os Canais de Referências
Edit8.Text := ''''''''Canal 2'''''''';
Edit9.Text := ''''''''Pressão''''''''; // Apresenta a Variável de Engenharia como Pressão
Edit10.Text := ''''''''Vazão''''''''; // Apresenta a Variável de Engenharia como Vazão
Edit11.Text := ''''''''mca''''''''; // Apresenta a Unidade de Pressão
Edit12.Text := F_Vazao.Label2.Caption; // Apresenta a Unidade de Vazão
DataHoraTermino := DataHoraTermino + copy(linha, 1, 19); // Copia a Data e Hora do Final das Coletas na Linha do Arquivo txt
Edit15.Text := FormatDateTime(''''''''DD''''''''+''''''''/''''''''+''''''''MM''''''''+''''''''/''''''''+''''''''YY''''''''+'''''''' ''''''''+''''''''HH''''''''+'''''''':''''''''+''''''''NN''''''''+'''''''':''''''''+''''''''SS'''''''', StrToDateTime(DataHoraInicio));// Mostra a Data e Hora Inicial das Coletas
Edit16.Text := FormatDateTime(''''''''DD''''''''+''''''''/''''''''+''''''''MM''''''''+''''''''/''''''''+''''''''YY''''''''+'''''''' ''''''''+''''''''HH''''''''+'''''''':''''''''+''''''''NN''''''''+'''''''':''''''''+''''''''SS'''''''', StrToDateTime(DataHoraInicio));// Mostra a Data e Hora Inicial das Coletas
Edit17.Text := FormatDateTime(''''''''DD''''''''+''''''''/''''''''+''''''''MM''''''''+''''''''/''''''''+''''''''YY''''''''+'''''''' ''''''''+''''''''HH''''''''+'''''''':''''''''+''''''''NN''''''''+'''''''':''''''''+''''''''SS'''''''', StrToDateTime(DataHoraTermino));// Mostra a Data e Hora Final das Coletas
Edit18.Text := FormatDateTime(''''''''DD''''''''+''''''''/''''''''+''''''''MM''''''''+''''''''/''''''''+''''''''YY''''''''+'''''''' ''''''''+''''''''HH''''''''+'''''''':''''''''+''''''''NN''''''''+'''''''':''''''''+''''''''SS'''''''', StrToDateTime(DataHoraTermino));// Mostra a Data e Hora Final das Coletas

ListBox1.Items.Text := StringReplace(ListBox1.Items.Text,'''''''' '''''''','''''''' '''''''',[rfReplaceAll]);

{************************************************************
Crie esta função para fazer o cálculo da pressão da vazão
para outro cálculo basta implementar na função.
************************************************************}
ShowMessage(SomaTotal());
// Destroi o array dinâmico
FreeAndNil(Coluna);
//Closefile(ArqTxt); // Fecha o Arquivo txt
end;
Closefile(ArqTxt); // Fecha o Arquivo txt
//ListBox1.Items.Clear; // Limpa o ListBox1
end;
Anderson

Anderson

Responder

Posts

20/04/2020

Anderson

Corrigindo o trecho do código.


procedure TF_Grafico.Botao_AbrirClick(Sender: TObject);
var
  ArqTxt : TextFile;
  linha : string;
  Coluna: TStringList;
  I: Integer;
begin
  Chart1.Title.Text.Clear;                                                      // Limpa Texto do Gráfico
  Chart1.Series[0].Clear;                                                       // Limpa o Gráfico 0
  Chart1.Series[1].Clear;                                                       // Limpa o Gráfico 1
  DataHora := '';                                                               // Limpa a Variável DataHora
  DataHoraInicio := '';
  DataHoraTermino := '';

  if OpenDialog1.Execute then                                                   // Abre Diretório do Arquivo
  if Application.MessageBox('Deseja Realmente Carregar o Arquivo Selecionado?',pchar(application.title),+MB_ICONQUESTION+MB_YESNO+MB_DEFBUTTON1) = id_yes then
  begin
     // Cria um array dinâmico
    Coluna := TStringList.Create;
    AssignFile(ArqTxt,OpenDialog1.FileName);                                    // Abrir o arquivo
    Reset(ArqTxt);                                                              // Reseta o Arquivo txt
    X := 0;                                                                     // Carrega a Variável X com 0
    Readln(ArqTxt, Linha);                                                      // Leitura da Linha do Arquivo txt
    DataHoraInicio:= DataHoraInicio + copy(linha, 1, 19);                       // Copia a Data e Hora Inicial das Coletas na Linha do Arquivo txt
    Reset(ArqTxt);                                                              // Reseta o Arquivo txt
    Chart1.Title.Text.Add(OpenDialog1.FileName);                                // Carrega a Variável Chart1 com o Nome do Arquivo
    while not eof(ArqTxt) do                                                    // Aguarda Leitura do Arquivo até a última linha
    begin
      Readln(ArqTxt, Linha);                                                    // Leitura da Linha do Arquivo txt
      listbox1.Items.add(linha);                                                // Copia a Linha do Arquivo txt
      for I := 0 to ListBox1.Items.Count - 1 do                                 // Efetua a Leitura de Linha a Linha
      begin
        Coluna.Text := StringReplace(ListBox1.Items.Strings[I], ' ', #13, [rfReplaceAll]); // Carrega a Variável Coluna com os Itens e Valores da Linha
      end;

      DataHora := DataHora + copy(linha, 1, 19);                                // Copia a Data e Hora da Linha do Arquivo txt
      PressaoY := Coluna[2];                                                    // Copia a Pressão da Linha do Arquivo txt
      VazaoY := Coluna[3];                                                      // Copia a Vazão da Linha do Arquivo txt

      chart1.Series[1].AddXY(X, StrToFloat(PressaoY), FormatDateTime('DD'+'/'+'MM'+'/'+'YY'+' '+'HH'+':'+'NN'+':'+'SS', StrToDateTime(DataHora)),1); // Plota o Gráfico da Pressão
      chart1.Series[0].AddXY(X, StrToFloat(VazaoY), FormatDateTime('DD'+'/'+'MM'+'/'+'YY'+' '+'HH'+':'+'NN'+':'+'SS', StrToDateTime(DataHora)),1); // Plota o Gráfico da Vazão

      DataHora := '';                                                           // Limpa a Variável DataHora
      PressaoY := '';                                                           // Limpa a Variável PressaoY
      VazaoY := '';                                                             // Limpa a Variável VazaoY
      Inc(X);                                                                   // Incrementa o Eixo X do Gráfico
      Edit6.Text := MaiorVazao;                                                 // Mostra Maior Vazão
      Edit4.Text := MenorVazao;                                                 // Mostra Menor Vazão
      Edit3.Text := MaiorPressao;                                               // Mostra Maior Pressão
      Edit1.Text := MenorPressao;                                               // Mostra Menor Pressão
    end;

    Edit7.Text := 'Canal 1';                                                    // Apresenta os Canais de Referências
    Edit8.Text := 'Canal 2';
    Edit9.Text := 'Pressão';                                                    // Apresenta a Variável de Engenharia como Pressão
    Edit10.Text := 'Vazão';                                                     // Apresenta a Variável de Engenharia como Vazão
    Edit11.Text := 'mca';                                                       // Apresenta a Unidade de Pressão
    Edit12.Text := F_Vazao.Label2.Caption;                                      // Apresenta a Unidade de Vazão
    DataHoraTermino := DataHoraTermino + copy(linha, 1, 19);                    // Copia a Data e Hora do Final das Coletas na Linha do Arquivo txt
    Edit15.Text := FormatDateTime('DD'+'/'+'MM'+'/'+'YY'+' '+'HH'+':'+'NN'+':'+'SS', StrToDateTime(DataHoraInicio));// Mostra a Data e Hora Inicial das Coletas
    Edit16.Text := FormatDateTime('DD'+'/'+'MM'+'/'+'YY'+' '+'HH'+':'+'NN'+':'+'SS', StrToDateTime(DataHoraInicio));// Mostra a Data e Hora Inicial das Coletas
    Edit17.Text := FormatDateTime('DD'+'/'+'MM'+'/'+'YY'+' '+'HH'+':'+'NN'+':'+'SS', StrToDateTime(DataHoraTermino));// Mostra a Data e Hora Final das Coletas
    Edit18.Text := FormatDateTime('DD'+'/'+'MM'+'/'+'YY'+' '+'HH'+':'+'NN'+':'+'SS', StrToDateTime(DataHoraTermino));// Mostra a Data e Hora Final das Coletas

    ListBox1.Items.Text := StringReplace(ListBox1.Items.Text,' ',' ',[rfReplaceAll]);

    {************************************************************
      Crie esta função para fazer o cálculo da pressão da vazão
      para outro cálculo basta implementar na função.
    ************************************************************}
    ShowMessage(SomaTotal());
    // Destroi o array dinâmico
    FreeAndNil(Coluna);
    //Closefile(ArqTxt); // Fecha o Arquivo txt
    end;
    Closefile(ArqTxt); // Fecha o Arquivo txt
    //ListBox1.Items.Clear; // Limpa o ListBox1
end;



Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar