Ajuda com Aplicação

23/01/2013

1

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á
Responder

Posts

23/01/2013

Joel Rodrigues

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.
Responder

24/01/2013

Coop Stinger

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
Responder

24/01/2013

Joel Rodrigues

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.
Responder

24/01/2013

Coop Stinger

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

24/01/2013

Coop Stinger

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
Responder

24/01/2013

Rafael Cunha

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.
Responder

24/01/2013

Coop Stinger

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.
Responder

24/01/2013

Rafael Cunha

Você pode disponibilizar esse projeto para que possamos lhe ajudar.
Responder

24/01/2013

Coop Stinger

Posso sim, posso hospedar no mediafire?
Responder

24/01/2013

Coop Stinger

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.
Responder

24/01/2013

Rafael Cunha

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;
Responder

24/01/2013

Coop Stinger

á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?
Responder

24/01/2013

Coop Stinger

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?
Responder

25/01/2013

Rafael Cunha

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

25/01/2013

Rafael Cunha

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