mRoman
20-10-2011, 21:17:17
Hola amigos, como están?
Nuevamente pidiendo su apoyo para resolver un problema q tengo. Les explico:
Tengo una archivo de tipo texto que esta delimitado por el simbolo pipe "|" y lo estoy cargando a un StringList y despues a un StringGrid, pero como que no me respeta el pipe cuando encuentra un espacio en blanco. Dentro del archivo esta algo como esto:
0000000002|002268176A|05/09/2011|225|18|1820002400||19|1|||||||||SALDAÑA|LUEVANO|SANDRA LUZ|OBREGON|439 |0 |TABASCO|PORTES GIL|BEIS|63200||CERCA DEL KINDER|18|18|1||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||1|1|1|24|07:15|19||20324 739|SI
0000000002|002268176A|05/09/2011|225|18|1820002500||41|1|||||||||MAGAÑA|MERAZ|TANNIA|FRANCISCO SARABIA|125 |0 |CORONA|SIMON SANCHEZ|BEIS|63200||ABARROTES AGREDANO|18|18|1||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||1|2|2|17|07:45|41||203 24742|SI
0000000005|002268176A|05/09/2011|225|18|1820002500||42|1|||||||||VALENZUELA|GARCIA|PETRA|SIMON SANCHEZ|603 |0 |JUSTO SIERRA|FRANCISCO SARABIA|BEIS|63200||MERCADITO SIMON SANCHEZ|18|18|1||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||1|2|2|17|07:45|42||2032 4743|SI
Dentro de la primer linea de texto esta la cadena de "|SANDRA LUZ|", esto delphi me lo carga en el StringGrid en columnas diferentes cuando lo mas lògico seria q lo cargue en una sola columna. He configurado las propiedas Delimiter y DelimitedText de ambos objetos (StringList y StringGrid) con el simbolo pipe.
Les paso el código completo de mi programa:
unit STRGList;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Grids, DB, DBTables;
type
TForm1 = class(TForm)
Label1: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
odAbrir: TOpenDialog;
edNFichero: TEdit;
lbCadenas: TListBox;
sgCadenas: TStringGrid;
Edit1: TEdit;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
procedure RellenarLB();
procedure RellenarSG();
public
{ Public declarations }
SL : TStringList;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
var
nCol:Integer;
begin
EdNFichero.Text := '';
for nCol:=0 to SGCadenas.ColCount-1 do
begin
// SGCadenas.Cells[nCol,0] := 'Campo'+IntToStr(nCol);
end;
SL := TStringList.Create;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SL.Free;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
VAR
NombreFichero: String;
begin
IF ODAbrir.Execute THEN
BEGIN
NombreFichero := ODAbrir.FileName;
IF NOT(FileExists(NombreFichero)) THEN
ShowMessage('No se puede cargar el archivo ' + NombreFichero)
ELSE
BEGIN
// SL.DelimitedText:='|';
SL.Delimiter:='|';
SL.DelimitedText:='|';
SL.LoadfromFile(NombreFichero);
EdNFichero.Text := NombreFichero;
ShowMessage(SL.DelimitedText);
RellenarLB;
RellenarSG;
END;
END;
SGCadenas.RowCount:=LBCadenas.Count;
end;
procedure tForm1.RellenarLB;
VAR
i: Integer;
BEGIN
LBCadenas.Clear;
FOR i := 0 TO SL.Count - 1 DO
begin
LBCadenas.Items.Add(SL.Strings[i]);
end;
END;
procedure tForm1.RellenarSG;
VAR
i: Integer;
PosIni,PosFin,Lin,Col: Integer;
NombreParametro: String;
BEGIN
FOR i := 0 TO SL.Count - 1 DO
BEGIN
SGCadenas.Rows[i].Delimiter:='|';
SGCAdenas.Rows[i].DelimitedText:=SL.Strings[i];
END;
END;
end.
Que me hace falta para que se cargue bien las cadenas q contienen espacios en blanco en una sola columna de mi StringGrid. He visto opciones con ADO, pero requiere de hacer cambios al regedit y no quiero irme hasta alla ya que es algo mas laborioso para el usuario final, en otras palabras le tengo q explicar como hacerlo ya que no estaré ahi para hacerlo yo, entonces no es opción.
Espero me puedan ayudar.
TRABAJO CON DELPHI 6.
Saludos !!!
Nuevamente pidiendo su apoyo para resolver un problema q tengo. Les explico:
Tengo una archivo de tipo texto que esta delimitado por el simbolo pipe "|" y lo estoy cargando a un StringList y despues a un StringGrid, pero como que no me respeta el pipe cuando encuentra un espacio en blanco. Dentro del archivo esta algo como esto:
0000000002|002268176A|05/09/2011|225|18|1820002400||19|1|||||||||SALDAÑA|LUEVANO|SANDRA LUZ|OBREGON|439 |0 |TABASCO|PORTES GIL|BEIS|63200||CERCA DEL KINDER|18|18|1||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||1|1|1|24|07:15|19||20324 739|SI
0000000002|002268176A|05/09/2011|225|18|1820002500||41|1|||||||||MAGAÑA|MERAZ|TANNIA|FRANCISCO SARABIA|125 |0 |CORONA|SIMON SANCHEZ|BEIS|63200||ABARROTES AGREDANO|18|18|1||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||1|2|2|17|07:45|41||203 24742|SI
0000000005|002268176A|05/09/2011|225|18|1820002500||42|1|||||||||VALENZUELA|GARCIA|PETRA|SIMON SANCHEZ|603 |0 |JUSTO SIERRA|FRANCISCO SARABIA|BEIS|63200||MERCADITO SIMON SANCHEZ|18|18|1||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||1|2|2|17|07:45|42||2032 4743|SI
Dentro de la primer linea de texto esta la cadena de "|SANDRA LUZ|", esto delphi me lo carga en el StringGrid en columnas diferentes cuando lo mas lògico seria q lo cargue en una sola columna. He configurado las propiedas Delimiter y DelimitedText de ambos objetos (StringList y StringGrid) con el simbolo pipe.
Les paso el código completo de mi programa:
unit STRGList;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Grids, DB, DBTables;
type
TForm1 = class(TForm)
Label1: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
odAbrir: TOpenDialog;
edNFichero: TEdit;
lbCadenas: TListBox;
sgCadenas: TStringGrid;
Edit1: TEdit;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
procedure RellenarLB();
procedure RellenarSG();
public
{ Public declarations }
SL : TStringList;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
var
nCol:Integer;
begin
EdNFichero.Text := '';
for nCol:=0 to SGCadenas.ColCount-1 do
begin
// SGCadenas.Cells[nCol,0] := 'Campo'+IntToStr(nCol);
end;
SL := TStringList.Create;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SL.Free;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
VAR
NombreFichero: String;
begin
IF ODAbrir.Execute THEN
BEGIN
NombreFichero := ODAbrir.FileName;
IF NOT(FileExists(NombreFichero)) THEN
ShowMessage('No se puede cargar el archivo ' + NombreFichero)
ELSE
BEGIN
// SL.DelimitedText:='|';
SL.Delimiter:='|';
SL.DelimitedText:='|';
SL.LoadfromFile(NombreFichero);
EdNFichero.Text := NombreFichero;
ShowMessage(SL.DelimitedText);
RellenarLB;
RellenarSG;
END;
END;
SGCadenas.RowCount:=LBCadenas.Count;
end;
procedure tForm1.RellenarLB;
VAR
i: Integer;
BEGIN
LBCadenas.Clear;
FOR i := 0 TO SL.Count - 1 DO
begin
LBCadenas.Items.Add(SL.Strings[i]);
end;
END;
procedure tForm1.RellenarSG;
VAR
i: Integer;
PosIni,PosFin,Lin,Col: Integer;
NombreParametro: String;
BEGIN
FOR i := 0 TO SL.Count - 1 DO
BEGIN
SGCadenas.Rows[i].Delimiter:='|';
SGCAdenas.Rows[i].DelimitedText:=SL.Strings[i];
END;
END;
end.
Que me hace falta para que se cargue bien las cadenas q contienen espacios en blanco en una sola columna de mi StringGrid. He visto opciones con ADO, pero requiere de hacer cambios al regedit y no quiero irme hasta alla ya que es algo mas laborioso para el usuario final, en otras palabras le tengo q explicar como hacerlo ya que no estaré ahi para hacerlo yo, entonces no es opción.
Espero me puedan ayudar.
TRABAJO CON DELPHI 6.
Saludos !!!