Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-03-2013
hondaalberto hondaalberto is offline
Miembro
 
Registrado: sep 2010
Ubicación: República Dominicana
Posts: 67
Poder: 14
hondaalberto Va por buen camino
Escribir un Valor en un Edit y Buscarlo en Un archivo TXT

Buenas tardes Amigo tengo la Siguiente Inquietud.

Tengo un archivo de Texto que contiene muchas lineas y cada valor separado por este simbolo "|", Necesito escribir en un Edit el número que aparece al principio "00100235701" Y mostrar en un otros edits los demas datos que pertenecen a este número:

Ejemplo:

Edit1= JUAN PEREZ PEREZ
EDIT2= SERVICIOS PERSONALES EN GENERAL
......

Ejemplo de la Estructura del Archivo, Todos esos datos estan en una línea en el Archivo.:

00100235701|JUAN PEREZ PEREZ||SERVICIOS PERSONALES EN GENERA| | | | |25/0/1999|ACTIVO|NORMAL

Muchas Gracias por anticipado por su valiosa ayuda.
Responder Con Cita
  #2  
Antiguo 19-03-2013
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 16
TOPX Va camino a la fama
Buenas tardes,

Por favor revise la respuesta #4 del siguiente hilo:
-
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #3  
Antiguo 20-03-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
hondaalberto,

Cita:
Empezado por hondaalberto
...Tengo un archivo de Texto que contiene muchas lineas y cada valor separado por este simbolo "|"...
Revisa este código:
Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    ListBox1: TListBox;
    Edit4: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
   ListBox1.Items.LoadFromFile('Data.txt');
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
   StrList : TStringList;
   i,j,p : Integer;
   offset : Integer;
   Data : string;

begin

   StrList := TStringList.Create;

   for i := 0 to ListBox1.Count -1 do
      if ListBox1.Selected[i] then
         begin
            offset := 1;
            Data := ListBox1.Items.Strings[i]+'|';
            for j := 1 to Length(Data) do
            begin
               if  Data[j] = '|' then
               begin
                  p := PosEx('|',Data,offset);
                  StrList.Add(Copy(Data,offset,p-offset));
                  offset := p+1;
               end;
            end;
            Edit1.Text := StrList[0];
            Edit2.Text := StrList[1];
            Edit3.Text := StrList[2];
            Edit4.Text := StrList[3];
            Break;
         end;

   StrList.Free;

end;

end.
El código anterior lee un archivo TXT en el cual los datos son separados con el carácter "|" en un control TListBox y al pulsar cada item del control (Registros del archivo TXT) los campos son separados y cargados en una variable TStringList la cual almacenara todos los campos del registro para su posterior procesamiento en controles TEdit.

Para efectos del ejemplo el archivo tiene solo 4 campos por registro, los cuales son extensibles según se requiera:
Cita:
111111|Nombre1 Apellido1|Departamento Empresa 1|01/01/2013
222222|Nombre2 Apellido2|Departamento Empresa 2|02/02/2013
333333|Nombre3 Apellido3|Departamento Empresa 3|03/03/2013
El código y el archivo de prueba están disponibles en el link : http://terawiki.clubdelphi.com/Delph...ArchivoTXT.rar

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 20-03-2013 a las 03:21:36.
Responder Con Cita
  #4  
Antiguo 20-03-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Otra alternativa para obtener un determinado campo:
Código Delphi [-]
function GetTextField(const SearchedText: string; SList: TStrings;
  const InxRetField: Integer; const Sep: Char): string;
var
  Aux  : TStrings;
  i    : Integer;
  Found: Boolean;
begin
  Result := '';
  i      := 0;
  Found  := False;
  while not Found and (i < SList.Count) do
  begin
    Aux := TStringList.Create;
    try
      Aux.Delimiter     := Sep;
      Aux.DelimitedText := SList[i];
      Found := Aux.IndexOf(SearchedText) <> -1;
      if Found then
        Result := Aux[InxRetField];
    finally
      Aux.Free;
    end;
    Inc(i);
  end
end;

Lamentablemente algunas versiones antiguas de Delphi (como la que tengo) adolecen de un bug. Y este es, que sea cual fuere el separador especificado, incluye siempre el espacio (' ') como tal, y por tanto no funcionará.
Pero aplicando algunas modificaciones que reemplacen los espacios por un caracter que sea inexistente en los datos, se puede lograr "esquivar" el bug:
Código Delphi [-]
// En el ejemplo mi caracter inexistente será  '~' (126)
function GetTextField(const SearchedText: string; SList: TStrings;
  const InxRetField: Integer; const Sep: Char): string;
const
  NONEXISTCHAR = #126;
var
  Aux: TStrings;
  i  : Integer;
  Found: Boolean;
begin
  Result := '';
  i      := 0;
  Found  := False;
  while not Found and (i < SList.Count) do
  begin
    Aux := TStringList.Create;
    try
      Aux.Delimiter     := Sep;
      Aux.DelimitedText := StringReplace(SList[i], ' ', NONEXISTCHAR , [rfReplaceAll]);
      Found := Aux.IndexOf(StringReplace(SearchedText, ' ', NONEXISTCHAR, [rfReplaceAll])) <> -1;
      if Found then
        Result := StringReplace(Aux[InxRetField], NONEXISTCHAR, ' ', [rfReplaceAll]);
    finally
      Aux.Free;
    end;
    Inc(i);
  end
end;

Llamada de ejemplo (para ambos casos):
Código Delphi [-]
var
  List: TStrings;
begin
  List := TStringList.Create;
  try
    List.LoadFromFile('C:\LINEAS.TXT');
    Edit2.Text := GetTextField(Edit1.Text, List, 3, '|');
  finally
    List.Free;
  end;
end;
El argumento InxRetField tiene como cota inferior cero y como superior el número de campos -1 (para tu caso sería 11-1).

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Escribir solo números en un edit CarlosAlberto Varios 8 05-08-2016 20:58:14
Escribir en Edit sin que se borre el contenido existente alphazkr Varios 4 08-03-2013 12:56:28
Escribir en Edit lucas05 Varios 2 21-10-2012 04:47:08
Escribir en un Edit números En Sud índice y superíndice gulder Varios 2 02-07-2008 04:05:58
escribir en un edit principiante22 Varios 2 18-07-2007 02:31:39


La franja horaria es GMT +2. Ahora son las 20:28:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi