ayuda con este programa que hice
Publicado por dani (4 intervenciones) el 08/03/2012 12:58:29
Necesito ayuda de alguien, este es mi cencillo program, lo que ace es..
Abrir un archivo de texto, el cual contendra mas del mil lineas cada linea con datos personales desordenados, y lo que debo acer es almacenar cada dato de forma ordenada, algo asi
original.txt
javier facundo,32 años, estudiante, nacido paraguay, fecha 12/12/88, padre HORACIO ORTIZ, MADRE JULIA KARG,20 AÑOS, NACIDO EN MALAGA ESPAÑA, 12/12/77, POLITICO
SERGIO RONDOUS, ARGENTIO, NACIDO 12/11/77 TUCUMAN, PANADERO
LUCIA JATOF, costurera, argentina,nacio el 02/08/90
y la forma de ordenar seria asi:
NOMBRE APELLIDO, EDAD, FECHA NACIO, LUGAR NACIO, PADRES, A QUE SE DEDICA
Entonces en listBox1 se carga la primer linea del archivo y mediante Button1 voy seleccionando que dato pasar al listBox2, para de esa manera ordenar los datos de la manera correcta, en caso de que faltara un dato, por ejemplo no tuviera NACIONALIDAD, presionaria Button3 para que este agregue un simbolo en el lugar que corresponderia a la Nacionalidad en el Listbox2, Despues de pasar el ultimo dato del Listbox1 presionaria otro Buton4 para que se repita el ciclo, se cargue nuevamente otra linea y se repita todo de nuevo.
Ya tengo algo armado lo que quiero, pero el drama esta en como acer para que se cargue la primer linea, luego ordenar mediante Button1, y despues k termine se repita el ciclo, en mi codigo como esta me carga todo el archivo en el LstBox1, y lo que quiero es que primeor me cargue la primer linea, luego que lo ordeno y almaceno en archivo detino, me cargue la siguiente.
Bueno.. espeor que alguna persona me pueda dar una idea de como acer esto
desde ya mchas gracias, saludos a todos
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
ListBox2: TListBox;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Label1: TLabel;
Button6: TButton;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if ListBox1.ItemIndex>=0 then
begin
ListBox2.Items.Add(ListBox1.Items[ListBox1.ItemIndex]); //copia la cadena a la lista2
ListBox1.Items.Delete(ListBox1.ItemIndex); //Borra el original
end;
ListBox1.SetFocus; //pasa el foco al listbox1 si mercar item
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
ListBox1.Items.Delete(ListBox1.ItemIndex);
ListBox2.Items.Delete(ListBox2.ItemIndex);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if ListBox2.ItemIndex>=0 then
begin
ListBox1.Items.Add(ListBox2.Items[ListBox2.ItemIndex]); //copia la cadena a la lista2
ListBox2.Items.Delete(ListBox2.ItemIndex); //Borra el original
end;
ListBox1.SetFocus; //pasa el foco al listbox1 si mercar item
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i : integer;
begin //pasa el todo del listbox1 al listbox2
for i:=0 to ListBox1.Items.Count - 1 do
ListBox2.Items.Add(ListBox1.Items[i]);
end;
{ /////////////////////////////////////////////////////////////////////////// }
function GetToken(Cadena:string; Separador:char; Token:integer):string; overload
{
Cadena es la string en la que buscar el token
Separador es la string que separa cada token
Token es el número de token que buscamos
Cadena is the string in that look for the token
Separador is the token separator
Token is the desired token number
}
var
Posicion:integer;
begin
while Token > 1 do begin
Delete(Cadena,1,Pos(Separador,Cadena));
Dec(Token);
end;
Posicion:=Pos(Separador,Cadena);
if Posicion=0
then result:=cadena
else Result:=Copy(Cadena,1,Posicion-Length(Separador));
end;
{ /////////////////////////////////////////////////////////////////////////// }
function GetToken(Cadena, Separador: String; Token: Integer): String; overload
var
Posicion: Integer;
begin
while Token > 1 do begin
Delete(Cadena, 1, Pos(Separador,Cadena)+Length(Separador)-1);
Dec(Token);
end;
Posicion:= Pos(Separador, Cadena);
if Posicion = 0
then Result:= Cadena
else Result:= Copy(Cadena, 1, Posicion-1);
end;
{ /////////////////////////////////////////////////////////////////////////// }
function GetTokenCount(Cadena:string; Separador:char):integer; overload;
var
Posicion:integer;
begin
Posicion:=Pos(Separador,Cadena);
Result:=1;
if Cadena <> '' then begin
if Posicion <> 0 then begin
while Posicion <> 0 do
begin
Delete(Cadena,1,Posicion);
Posicion:=Pos(Separador,Cadena);
Inc (Result);
end;
end;
end else Result:=0;
end;
{ /////////////////////////////////////////////////////////////////////////// }
procedure TForm1.FormCreate(Sender: TObject);
var
Archivo, Linea : TStringList;
SeparadaPorComas :string;
n ,i :integer;
f : TextFile;
begin
AssignFile( F, 'c:\original.txt' ); { archivo con lineas desordenadas de datos }
Reset( F );
While Not Eof(f) Do
begin
readLn(f, SeparadaPorComas); { CARGAMOS LA 1ER LINEA }
{ este for lo que ace es leer asta el final del STRING SeparadaporComas }
{ usando la funcion GtToken separa cada palbra delimitada por coma }
{ y la coloca en ListBox1, y repite el ciclo asta final archivo }
for n:=1 to GetTokenCount(SeparadaPorComas,',') do
begin
ListBox1.Items.Add(GetToken(SeparadaPorComas,',',n)); { Carga cada palabra al lstbox1 }
end;
end;
end;
end.
Abrir un archivo de texto, el cual contendra mas del mil lineas cada linea con datos personales desordenados, y lo que debo acer es almacenar cada dato de forma ordenada, algo asi
original.txt
javier facundo,32 años, estudiante, nacido paraguay, fecha 12/12/88, padre HORACIO ORTIZ, MADRE JULIA KARG,20 AÑOS, NACIDO EN MALAGA ESPAÑA, 12/12/77, POLITICO
SERGIO RONDOUS, ARGENTIO, NACIDO 12/11/77 TUCUMAN, PANADERO
LUCIA JATOF, costurera, argentina,nacio el 02/08/90
y la forma de ordenar seria asi:
NOMBRE APELLIDO, EDAD, FECHA NACIO, LUGAR NACIO, PADRES, A QUE SE DEDICA
Entonces en listBox1 se carga la primer linea del archivo y mediante Button1 voy seleccionando que dato pasar al listBox2, para de esa manera ordenar los datos de la manera correcta, en caso de que faltara un dato, por ejemplo no tuviera NACIONALIDAD, presionaria Button3 para que este agregue un simbolo en el lugar que corresponderia a la Nacionalidad en el Listbox2, Despues de pasar el ultimo dato del Listbox1 presionaria otro Buton4 para que se repita el ciclo, se cargue nuevamente otra linea y se repita todo de nuevo.
Ya tengo algo armado lo que quiero, pero el drama esta en como acer para que se cargue la primer linea, luego ordenar mediante Button1, y despues k termine se repita el ciclo, en mi codigo como esta me carga todo el archivo en el LstBox1, y lo que quiero es que primeor me cargue la primer linea, luego que lo ordeno y almaceno en archivo detino, me cargue la siguiente.
Bueno.. espeor que alguna persona me pueda dar una idea de como acer esto
desde ya mchas gracias, saludos a todos
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
ListBox2: TListBox;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Label1: TLabel;
Button6: TButton;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if ListBox1.ItemIndex>=0 then
begin
ListBox2.Items.Add(ListBox1.Items[ListBox1.ItemIndex]); //copia la cadena a la lista2
ListBox1.Items.Delete(ListBox1.ItemIndex); //Borra el original
end;
ListBox1.SetFocus; //pasa el foco al listbox1 si mercar item
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
ListBox1.Items.Delete(ListBox1.ItemIndex);
ListBox2.Items.Delete(ListBox2.ItemIndex);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if ListBox2.ItemIndex>=0 then
begin
ListBox1.Items.Add(ListBox2.Items[ListBox2.ItemIndex]); //copia la cadena a la lista2
ListBox2.Items.Delete(ListBox2.ItemIndex); //Borra el original
end;
ListBox1.SetFocus; //pasa el foco al listbox1 si mercar item
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i : integer;
begin //pasa el todo del listbox1 al listbox2
for i:=0 to ListBox1.Items.Count - 1 do
ListBox2.Items.Add(ListBox1.Items[i]);
end;
{ /////////////////////////////////////////////////////////////////////////// }
function GetToken(Cadena:string; Separador:char; Token:integer):string; overload
{
Cadena es la string en la que buscar el token
Separador es la string que separa cada token
Token es el número de token que buscamos
Cadena is the string in that look for the token
Separador is the token separator
Token is the desired token number
}
var
Posicion:integer;
begin
while Token > 1 do begin
Delete(Cadena,1,Pos(Separador,Cadena));
Dec(Token);
end;
Posicion:=Pos(Separador,Cadena);
if Posicion=0
then result:=cadena
else Result:=Copy(Cadena,1,Posicion-Length(Separador));
end;
{ /////////////////////////////////////////////////////////////////////////// }
function GetToken(Cadena, Separador: String; Token: Integer): String; overload
var
Posicion: Integer;
begin
while Token > 1 do begin
Delete(Cadena, 1, Pos(Separador,Cadena)+Length(Separador)-1);
Dec(Token);
end;
Posicion:= Pos(Separador, Cadena);
if Posicion = 0
then Result:= Cadena
else Result:= Copy(Cadena, 1, Posicion-1);
end;
{ /////////////////////////////////////////////////////////////////////////// }
function GetTokenCount(Cadena:string; Separador:char):integer; overload;
var
Posicion:integer;
begin
Posicion:=Pos(Separador,Cadena);
Result:=1;
if Cadena <> '' then begin
if Posicion <> 0 then begin
while Posicion <> 0 do
begin
Delete(Cadena,1,Posicion);
Posicion:=Pos(Separador,Cadena);
Inc (Result);
end;
end;
end else Result:=0;
end;
{ /////////////////////////////////////////////////////////////////////////// }
procedure TForm1.FormCreate(Sender: TObject);
var
Archivo, Linea : TStringList;
SeparadaPorComas :string;
n ,i :integer;
f : TextFile;
begin
AssignFile( F, 'c:\original.txt' ); { archivo con lineas desordenadas de datos }
Reset( F );
While Not Eof(f) Do
begin
readLn(f, SeparadaPorComas); { CARGAMOS LA 1ER LINEA }
{ este for lo que ace es leer asta el final del STRING SeparadaporComas }
{ usando la funcion GtToken separa cada palbra delimitada por coma }
{ y la coloca en ListBox1, y repite el ciclo asta final archivo }
for n:=1 to GetTokenCount(SeparadaPorComas,',') do
begin
ListBox1.Items.Add(GetToken(SeparadaPorComas,',',n)); { Carga cada palabra al lstbox1 }
end;
end;
end;
end.
Valora esta pregunta


0