Ajuda com Aplicação

Delphi

23/01/2013

Bom pessoal antes de mais nada eu sou novo no fórum estou com uma tremenda dificuldade no Delphi para fazer um programa que gera uns dados em TXT, eu fiz um esquema mas não deu muito certo então eu não tive outra escolha e tive que vir aqui para pedir ajuda se alguém pode me ajudar eu agradeceria muito, bom galera é o seguinte:
Eu gostaria de fazer 1 programa que edita, e lê arquivos nesta sequência...


Definição do Objeto:
Categoria,item,Customizavel,valor1,valor2;

E todos Objetos seriam separados por ";" (Ponto-e-virgula)

Exemplo:

3,18,2,200,30;4,19,4,2000,150;

3 = categoria
18 = item
2 = customizavel
200 = valor1
30 = valor2


e 1 botão que eu possa adicionar mais sequencias, e os items são separados por ";"

Objeto 1 Objeto2
3,18,2,200,30;3,18,2,200,30;

Estou tendo uma tremenda dificuldade para fazer algo assim.

Queria poder editar os valores em Tedit cada edit receberia o valor dado de cada celula de um Objeto e eu editaria em problemas mas não consigo, e gostaria de salvar em TXT, além disso o programa teria que ler o mesmo por exemplo, eu abri o arquivo TXT com os dados que eu preenchi, e assim eu poderia editar o Objeto 9, podendo editar cada coluna sem alterar a estrutura da minha aplicação.

Se alguem puder me ajudar por favor me informe, grato desde já
Coop Stinger

Coop Stinger

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

23/01/2013

Amigo, o que exatamente você não conseguiu fazer? Se você tiver algo pronto talvez possamos trabalhar sobre isso.
Mas partindo do pressuposto que você não tenha nada pronto, eu vejo duas formas de fazer isso:
1) você gravaria um "objeto" por linha do txt, assim você poderia carregar o arquivo usando uma TStringList. Essa classe possui métodos para carregar e salvar arquivos facilmente e você pode acessar cada linha de forma rápida como strings.
2) você gravaria os "objetos" todos em uma linha só e teria de varrer essa linha identificando cada ocorrência do ponto-e-vírgula. Cada vez que encontrasse um ;, copiaria o trecho do string até ali para gerar um "objeto".
É fácil perceber que a primeira forma é bem mais simples e organizada.
Qualquer dúvida, é só avisar.
Abraço e boa sorte.
GOSTEI 0
Coop Stinger

Coop Stinger

23/01/2013

Amigo, o que exatamente você não conseguiu fazer? Se você tiver algo pronto talvez possamos trabalhar sobre isso.
Mas partindo do pressuposto que você não tenha nada pronto, eu vejo duas formas de fazer isso:
1) você gravaria um "objeto" por linha do txt, assim você poderia carregar o arquivo usando uma TStringList. Essa classe possui métodos para carregar e salvar arquivos facilmente e você pode acessar cada linha de forma rápida como strings.
2) você gravaria os "objetos" todos em uma linha só e teria de varrer essa linha identificando cada ocorrência do ponto-e-vírgula. Cada vez que encontrasse um ;, copiaria o trecho do string até ali para gerar um "objeto".
É fácil perceber que a primeira forma é bem mais simples e organizada.
Qualquer dúvida, é só avisar.
Abraço e boa sorte.


O 2 é o que encaixa melhor, eu tenho a aplicação, pois não consigo resolver fazer os dados que eu preciso, se você tiver Email e puder me adicionar, é que preciso resolver isso urgente faz meses que estou tentando

[IMG]http://i.imgur.com/Ntjjw5o.png[/IMG]

O modelo da aplicação pra ter uma base ta ali, mas ele não abre o arquivo correto, caso possa me ajudar eu agradeço, se tiver e-mail eu mostro a aplicação pelo Teamviewer, eu sou meio novato nisso ainda mas tava precisando fazer esse aplicativo, pois varri a net atrás de informações e nada consegui
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

23/01/2013

Eu só vou ter acesso ao Delphi na segunda-feira, mas vamos por parte.
Coloque aqui o código que você está usando para ler o arquivo.
Se possível, mostre também um exemplo de arquivo.
GOSTEI 0
Coop Stinger

Coop Stinger

23/01/2013

Ok eu faço Upload em algum site? se você tiver algum email é mais facil ae eu adiciono você e explico melhor
GOSTEI 0
Coop Stinger

Coop Stinger

23/01/2013

Meu código é esse ( acredito q esteja errado é que )
unit Umain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    ListBox1: TListBox;
    Label1: TLabel;
    Label2: TLabel;
    GroupBox1: TGroupBox;
    Label3: TLabel;
    Edit1: TEdit;
    Image1: TImage;
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Edit2: TEdit;
    Edit3: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Edit4: TEdit;
    Label7: TLabel;
    Edit5: TEdit;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  f: TextFile;

  valor1:string;
  valor2:string;
  custom:string;
  item:string;
  category:string;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

  valor1:=(Edit5.Text);
  valor2:=(Edit4.Text);
  custom:=(Edit3.Text);
  item:=(Edit2.Text);
  category:=(Edit1.Text);

  AssignFile(f, ExtractFilePath(Application.exeName) + '\shop.txt');
  Rewrite(f);
  Write(f,(category) + ',' + (item) + ',' + (custom) + ',' + (valor1) + ',' + (valor2) + ';');
  Closefile(f);
  Memo1.Lines.LoadFromFile(ExtractFilePath(Application.exeName) + '\shop.txt')

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Lines.LoadFromFile(ExtractFilePath(Application.exeName) + '\shop.txt')
//Load(f,(category) + ',' + (item) + ',' + (custom) + ',' + (valor1) + ',' + (valor2) + ';');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin

AssignFile(f, ExtractFilePath(Application.exeName) + '\shop.txt');
Rewrite(f);
Writeln(f, Edit1.Text, ',', Edit2.Text, ',', Edit3.Text, ',', Edit4.Text, ',', Edit5.Text, ';');
Closefile(f);
Memo1.Lines.LoadFromFile(ExtractFilePath(Application.exeName) + '\shop.txt')
end;

end.



O arquivo que deve ler é este

SHOP0,3,1,20,0;0,5,2,100,0;0,2,1,200,0;0,4,1,200,0;0,1,2,500,0;0,6,2,500,0;1,1,1,200,0;1,2,1,200,0;0,7,1,200,0;0,8,1,300,0;0,9,4,500,0;0,10,1,100,0;0,11,1,500,0;1,4,1,200,0;0,12,1,200,0;0,13,1,500,0;0,14,3,300,0;1,3,1,200,0;1,5,1,300,0;0,15,1,200,0;3,1,1,100,0;3,2,1,25,0;3,3,1,150,0;3,4,0,400,0;0,16,2,300,0;0,17,3,200,0;0,18,1,300,0;0,19,2,300,0;0,20,2,500,0;0,21,2,200,0;2,1,1,100,0;3,5,1,300,0;0,22,1,300,0;0,23,3,400,0;0,24,1,50,0;0,25,1,250,0;0,26,1,300,0;0,27,2,800,0;0,28,2,300,0;0,29,3,500,0;4,1,3,200,0;4,2,1,200,0;0,30,1,200,0;0,31,1,300,0;0,32,1,800,0;0,33,2,150,0;0,34,2,400,0;0,35,1,1000,0;0,36,2,500,0;0,37,1,200,0;0,38,3,800,0;1,6,2,800,0;0,41,1,1000000,0;0,42,2,1000000,0;4,3,1,1000000,0;2,3,1,1000000,0;0,43,1,200,0;0,44,3,250,0;0,45,1,300,0;0,46,2,100,0;0,47,4,1500,0;1,7,3,50,0;2,4,2,20,0;3,6,1,300,0;3,7,1,300,0;4,4,2,50,0;1,8,1,50,0;0,48,2,300,0;0,52,0,400,0;2,5,2,300,0;0,51,1,200,0;0,49,3,500,0;3,8,0,400,0;0,54,2,50,0;0,50,1,400,0;0,53,0,400,0;3,9,1,400,0;0,55,1,100,0;4,6,2,50,0;3,10,1,20,0;2,9,0,1000000,0;0,61,1,200,0;0,62,2,300,0;1,10,1,100,0;0,63,1,350,0;0,64,2,300,0;1,11,2,200,0;0,68,7,200,0;0,69,6,200,0;0,70,4,200,0;0,71,2,200,0;0,72,3,200,0;0,73,2,200,0;3,12,1,150,0;0,65,2,200,0;3,13,0,150,0;0,66,2,300,0;0,67,1,400,0;0,74,2,150,0;3,14,1,50,0;0,77,3,250,0;4,8,2,100,0;0,78,3,300,0;2,10,3,3001,0;0,79,2,250,0;1,12,2,400,0;0,75,2,50,0;0,76,1,200,0;2,2,0,1000000,0;4,9,2,1000000,0;0,39,2,1000000,0;0,81,1,1000000,0;3,15,0,1000000,0;0,82,1,1000000,0;0,80,1,1000000,0;0,40,2,1000000,0;0,83,2,1000000,0;3,16,1,1000000,0;2,12,1,1000000,0;4,10,1,1000000,0;2,11,1,1000000,0;0,85,2,1000000,0;0,84,0,1000000,0;1,9,1,1000000,0;4,5,2,1000000,0;2,6,2,1000000,0;4,11,2,1000000,0;2,13,1,1000000,0;4,12,1,1000000,0;0,86,0,1000,0;2,15,0,600,0;2,14,3,200,0;0,88,2,1000000,0;1,14,3,1000000,0;0,87,3,1000000,0;0,56,4,1000000,0;0,57,1,1000000,0;0,58,0,1000000,0;2,7,0,1000000,0;2,8,2,1000000,0;3,11,0,1000000,0;0,89,2,1000000,0;0,91,0,1000000,0;0,90,0,1000000,0;0,93,3,1000000,0;0,92,3,1000000,0;0,59,1,1000000,0;0,60,0,1000000,0;4,7,2,1000000,0;3,17,0,1000000,0;2,16,3,1000000,0;0,94,3,1000000,0;0,95,5,1000001,0;0,96,2,400,40;0,97,4,400,40;1,15,0,400,40;2,17,0,400,40;3,18,0,400,40;4,13,0,400,40;5,1,1,400,40;5,2,1,400,40;5,3,1,400,40;5,4,1,400,40;5,5,1,400,40;5,6,4,400,40;5,7,2,400,40;5,8,4,400,40;21,0,0,500,50;21,1,0,500,50;21,2,0,1000,150;21,3,0,1000,150;21,4,0,1000,150;21,5,0,1000,150;22,2,0,4000,300;22,3,0,4000,300;22,4,0,4000,300;22,5,0,4000,300;22,6,0,4000,300;22,7,0,6000,350;22,8,0,8000,400;3,19,2,1000001,0;0,98,1,400,40;1,16,2,1000001,0;1,13,0,1000001,0;0,99,2,200,40;0,101,3,300,40;0,102,3,500,40;3,20,3,20,2;3,21,3,60,6;3,22,1,100,10;3,23,2,100,10;5,9,2,400,40;5,10,2,200,40;2,18,2,40,4;2,19,1,100,10;6,1,2,2000,200;22,9,0,7000,400;22,10,0,1000001,0;7,1,0,1000001,0;8,1,0,1000001,0;3,24,2,1000000,0;1,17,1,1000000,0;2,20,1,1000000,0;4,14,3,200,40;2,21,0,300,40;0,103,2,250,40;2,22,3,400,40;22,11,0,7000,350;22,12,0,6500,325;22,13,0,5000,250;3,25,1,1000000,0;22,14,0,5000,250;4,15,3,1000000,0;2,23,0,1000000,0;0,104,1,1000000,0;3,26,2,1000000,0;6,2,1,1000000,0
GOSTEI 0
Rafael Cunha

Rafael Cunha

23/01/2013

Você terá que armazenar cada conjunto de informação em um linha e em seguida ler linha a linha para ir separando os itens nela armazenada.
GOSTEI 0
Coop Stinger

Coop Stinger

23/01/2013

Você poderia me ajudar com isso Rafael? eu to a tarde toda desde ontem e não consegui ainda, sou meio newbie nessa area, eu optei pelo Delphi pq ele é o melhor pra mim, mas quando se trata de separar dados por linha corretamente isso é meio complicado eu estou precisando fazer uma aplicação dessas a muito tempo praticamente mas ta dificil.
GOSTEI 0
Rafael Cunha

Rafael Cunha

23/01/2013

Você pode disponibilizar esse projeto para que possamos lhe ajudar.
GOSTEI 0
Coop Stinger

Coop Stinger

23/01/2013

Posso sim, posso hospedar no mediafire?
GOSTEI 0
Coop Stinger

Coop Stinger

23/01/2013

O link do Projeto ta ai mas ta zuado so meio leigo pra essas coisas

[url]http://www.mediafire.com/?px3jcnx7m62mtgn[/url]

Agradeço se alguém puder me ajudar.
GOSTEI 0
Rafael Cunha

Rafael Cunha

23/01/2013

Segue abaixo código de acho que pode te ajudar, qualquer dúvida é só pergunta.

//Adiciona um nova linha no arquivo
procedure TForm1.Button1Click(Sender: TObject);
var
  Arq: TStringList;
begin
  Arq := TStringList.Create;
  try
    Arq.LoadFromFile(ExtractFilePath(Application.exeName) + '\shop.txt');
    Arq.Append(Edit1.Text + ',' + Edit2.Text + ',' + Edit3.Text + ',' + Edit4.Text + ',' + Edit5.Text);
    Arq.SaveToFile(ExtractFilePath(Application.exeName) + '\shop.txt');
  finally
    Arq.Free;
  end;
end;

//Carrega o arquivo no ListBox
procedure TForm1.Button2Click(Sender: TObject);
var
  Arq: TStringList;
  Idx: Integer;
begin
  ListBox1.Clear;
  Arq := TStringList.Create;
  try
    Arq.LoadFromFile(ExtractFilePath(Application.exeName) + '\shop.txt');
    for Idx := 0 to Arq.Count - 1 do
      ListBox1.Items.Add(Arq.Strings[Idx]);
   finally
    Arq.Free;
  end;
end;

//Edita um registro listado no ListBox1
procedure TForm1.Button3Click(Sender: TObject);
var
  Arq: TStringList;
begin
  if (ListBox1.ItemIndex > -1) then
  begin
    Arq := TStringList.Create;
    try
      Arq.LoadFromFile(ExtractFilePath(Application.exeName) + '\shop.txt');
      Arq.Strings[ListBox1.ItemIndex] := Edit1.Text + ',' + Edit2.Text + ',' + Edit3.Text + ',' + Edit4.Text + ',' + Edit5.Text;
      Arq.SaveToFile(ExtractFilePath(Application.exeName) + '\shop.txt');
    finally
      Arq.Free;
    end;
  end;
end;

//Joga as informações do item selecionado no ListBox para as Edits
procedure TForm1.ListBox1Click(Sender: TObject);
var
  Line: String;
begin
  Line := ListBox1.Items[ListBox1.ItemIndex];
  Edit1.Text := Copy(Line, 0, Pos(',', Line) - 1);
  Delete(Line, 1, Pos(',', Line));
  Edit2.Text := Copy(Line, 0, Pos(',', Line) - 1);
  Delete(Line, 1, Pos(',', Line));
  Edit3.Text := Copy(Line, 0, Pos(',', Line) - 1);
  Delete(Line, 1, Pos(',', Line));
  Edit4.Text := Copy(Line, 0, Pos(',', Line) - 1);
  Delete(Line, 1, Pos(',', Line));
  Edit5.Text := Line;
end;
GOSTEI 0
Coop Stinger

Coop Stinger

23/01/2013

áh sim vou tentar aqui só pra falar ele não pode adicionar linhas tem que ser tudo em uma linha só, = o exemplo que dei do arquivo.


Você tem Msn Rafael, eu gostaria de adicionar, é seria 1 pouco mais facil?
GOSTEI 0
Coop Stinger

Coop Stinger

23/01/2013

Poxa rafael deu quase Certo mas ele deveria automaticamente separar os Objetos, entre ';' em linhas no Listbox, vou dar um exemplo...


no arquivo de Texto ele ta assim

SHOP0,3,1,20,0;0,5,2,100,0;0,2,1,200,0;


Na Stringlist teria q estar assim.

0,3,1,20,0;
0,5,2,100,0;
0,2,1,200,0;


Ta quase lá amigão, poderia me dar uma ajudinha apenas nisso?
GOSTEI 0
Rafael Cunha

Rafael Cunha

23/01/2013

No caso ele teria que armazenar tudo na mesma linha do arquivo?? É ler separando os objetos quando encontra um ";" seria isso???
GOSTEI 0
Rafael Cunha

Rafael Cunha

23/01/2013

No caso ele teria que armazenar tudo na mesma linha do arquivo?? É ler separando os objetos quando encontra um ";" seria isso???
GOSTEI 0
Coop Stinger

Coop Stinger

23/01/2013

No caso ele teria que armazenar tudo na mesma linha do arquivo?? É ler separando os objetos quando encontra um ";" seria isso???


Isso mesmo Seria por exemplo

Arquivo TXT seria isso...

SHOP0,3,1,20,0;0,5,2,100,0;0,2,1,200,0;0,4,1,200,0;...


A Stringlist deveria separar em linhas isso;

0,3,1,20,0;
0,5,2,100,0;
0,2,1,200,0;
0,4,1,200,0;


E eu queria saber se é possível criar um botão para remober uma linha por exemplo
ao clicar no botão [Remover]

ANTES
0,3,1,20,0;0,5,2,100,0;0,2,1,200,0;0,4,1,200,0;

Depois
0,3,1,20,0;0,5,2,100,0;0,2,1,200,0;

Removia o Item selecionado pela Stringlist entende?

e quando clicasse em Add ele adicionava um no final, e automaticamente a Stringlist atualizava em tempo real para ler o que foi adicionado, e selecionava o novo adicionado

0,3,1,20,0;0,5,2,100,0;0,2,1,200,0;0,4,1,200,0;0,0,0,0,0;
GOSTEI 0
Coop Stinger

Coop Stinger

23/01/2013

Alguém poderia me ajudar a solucionar meus problemas com minha aplicação?
GOSTEI 0
Coop Stinger

Coop Stinger

23/01/2013

Alguém por favor poderia me ajudar a resolver isso aki ?

Isso mesmo Seria por exemplo

#Código
Arquivo TXT seria isso...

SHOP0,3,1,20,0;0,5,2,100,0;0,2,1,200,0;0,4,1,200,0;...


A Stringlist deveria separar em linhas isso;

#Código

0,3,1,20,0;
0,5,2,100,0;
0,2,1,200,0;
0,4,1,200,0;


E eu queria saber se é possível criar um botão para remober uma linha por exemplo
ao clicar no botão [Remover]

ANTES
0,3,1,20,0;0,5,2,100,0;0,2,1,200,0;0,4,1,200,0;

Depois
0,3,1,20,0;0,5,2,100,0;0,2,1,200,0;

Removia o Item selecionado pela Stringlist entende?

e quando clicasse em Add ele adicionava um no final, e automaticamente a Stringlist atualizava em tempo real para ler o que foi adicionado, e selecionava o novo adicionado

0,3,1,20,0;0,5,2,100,0;0,2,1,200,0;0,4,1,200,0;0,0,0,0,0;
GOSTEI 0
Coop Stinger

Coop Stinger

23/01/2013

Alguém pode me ajudar?
GOSTEI 0
Rafael Cunha

Rafael Cunha

23/01/2013

O TStringList vai poder quebrar de linha mais apenas adicionar um ";" no final de cada linha, é isso que entendi?
GOSTEI 0
Tiago Melo

Tiago Melo

23/01/2013

Seguinte esse seu txt tem que GERADo em uma única linha apenas? essa é a regra para gerar o arquivo???
GOSTEI 0
Coop Stinger

Coop Stinger

23/01/2013

O TStringList vai poder quebrar de linha mais apenas adicionar um ";" no final de cada linha, é isso que entendi?


Quero que ele leia arquivos em uma linha...

exemplo 0,2,30,2,5;0,5,12,2,0;


e na Stringlist

0,2,30,2,5;
0,5,12,2,0;


e queria poder editar sem poder alterar o fluxo da aplicação editar adicionar e recarregar em tempo real os arquivos, eu fiz um +/- parecido eu poderia postar mais tarde.

http://www.mediafire.com/?a36f3h80pjyynrw
GOSTEI 0
Coop Stinger

Coop Stinger

23/01/2013

Poxa acho que terei que procurar outro fórum pra ver se alguém me ajuda, estou com dificuldades quase ninguém me responde até postei meu projeto pra vocês observarem ai pra download.
GOSTEI 0
Rafael Cunha

Rafael Cunha

23/01/2013

Cara o seguinte agora estou no serviço e não tenho como lhe ajudar, assim que chegar em casa dou uma olhada e tento postar um solução para o seu caso.
GOSTEI 0
Ricardo Alves

Ricardo Alves

23/01/2013

Cara,

O que você precisa é basicamente manipular strings e objetos.
O TStringList, tem uma lista de strings e uma lista de objetos.
Os métodos básicos do TStringList são:

Add
AddObject
Append
Delete
Insert
LoadFromFile
LoadFromStream
Move
SaveToFile
SaveToStream

Para trabalhar com strings, você pode utilizar um loop for simples:

for i := 1 to System.Length(s) do

onde s é a string que você está manipulando. Você pode testar caracter a caracter assim:

if System.SysUtils.CharInSet(s[i], [';']) then

Se você encontrar um ";" você tem um objeto senão, você tem uma propriedade. Ou seja, para
cada ";" você deve criar um objeto e preencher os campos dele com os valores encontrados.

Caso seus objetos sejam binários, voê pode usar um TList ou um TCollection para armazená-los.
Ou ainda pode usar um array dinâmico, vai depender do que você quer fazer.

O TStringList ainda tem uma propriedade LineBreak que eu nunca usei mas faça um teste.
Além do que, antes de entrar no loop for, verifique se o último caractere da string é um ";",
pode ser necessário adicionar um ";" no final da string caso ele não exista.

Flw,


GOSTEI 0
Jose Medeiros

Jose Medeiros

23/01/2013

boa tarde,

Tenho em um sistema de um cliente que usa aqueles coletores de dados, é uso da seguinte forma.

procedure coletadados;
txt: TextFile;
quebra:TStringList;
begin
Quebra:= TStringList.Create;
AssignFile(txt,arq);
reset(txt);
try
while not eoln(txt) do
begin
Quebra.Clear;
Readln(txt,arq);
ExtractStrings([';'],[],pchar(arq),Quebra);

ai o resultado desse loop pego assim:

edit1.text:= quebra.Strings[0];

olha se isso te ajuda.
GOSTEI 0
Coop Stinger

Coop Stinger

23/01/2013

Eu ainda não consegui resolver alguém poderia dar uma olhada na minha aplicação?
GOSTEI 0
POSTAR