
como puedo extraer datos de una cadena de texto!!
#1
Escrito 22 junio 2013 - 11:21
Por ejemplo..
(2,*57554579784547,*4578.25,0.00,*14578,Nombre de usuario,020,40,1457894512549745,Nombre de usuario,*Operado,Operado)
En este caso me gustaría poder obtener ciertos datos que se encuentran señaladas por asteriscos.
El resultado debe ser...
575545797845474578.2514578Operado
De antemano gracias si alguien pudiera ayudarme se lo agradecería bastante
#2
Escrito 22 junio 2013 - 11:42
Hola soy nuevo en Delphi y me gustaría poder extraer ciertos campos de una cadena de texto cuyos datos están separados por comas.
Por ejemplo..
(2,*57554579784547,*4578.25,0.00,*14578,Nombre de usuario,020,40,1457894512549745,Nombre de usuario,*Operado,Operado)
En este caso me gustaría poder obtener ciertos datos que se encuentran señaladas por asteriscos.
El resultado debe ser...
575545797845474578.2514578Operado
De antemano gracias si alguien pudiera ayudarme se lo agradecería bastante
Usando un TStringList y unos pocas lineas de código solucionas tu problema.
Te paso código pero tu debes de agregar lo que falte, no me gustaría sentirme como que te hago la tarea



lista.CommaText := Edit1.Text; for I := 0 to Lista.Count - 1 do begin if lista[I][1] = '*' then resultado := resultado + copy(lista[I],2,length(lista[I])); end;
Saludos
#3
Escrito 22 junio 2013 - 11:44
Bienvenido a DelphiAccess, sientete como en casa.
Saludos
#4
Escrito 22 junio 2013 - 01:05
Una pregunta en estos momentos genero un código mas no logro comprender como puedo plantear el procedimiento o mas bien como lo que anteriormente me ha explicado

unit Unit1; : interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; Button2: TButton; procedure Button1Click(Sender: TObject); procedure BT_EXAMINARCLICK(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.LoadFromFile('pruebabanco.txt'); end; procedure TForm1.BT_EXAMINARCLICK(Sender: TObject); begin Opendialog1.Execute; end; end.
#5
Escrito 22 junio 2013 - 05:26
Santiago.
#6
Escrito 27 junio 2013 - 08:15
Una pregunta en estos momentos genero un código mas no logro comprender como puedo plantear el procedimiento o mas bien como lo que anteriormente me ha explicado
Hola
Vamos por partes, primero hay que saber que queremos hacer, luego se comienza a escribir código.
Veo que tienes dos botones, en uno abres el Dialogo de abrir archivos y en otro abres un archivo definido y colocas su contenido en un Memo.
1. ¿Que es lo que quieres hacer en cada botón?
2. ¿Donde quieres hacer el proceso de extracción de datos de la cadena?
Con éstas dos preguntas podemos saber que pretendes hacer y a partir de ahí puedes generar el seudocódigo o codificar de inmediato, de otra forma estamos dando tumbos.
Saludos
#7
Escrito 28 junio 2013 - 01:08

#8
Escrito 28 junio 2013 - 01:14
jejeje gracias por todo pero al parecer ya pude y logre el objetivo gracias
Que bien, ¿podrías mostrarnos cual fué la solución?, así otros compañeros que tengan un problema similar encuentren la solución.
Saludos
#9
Escrito 28 junio 2013 - 02:36
procedure TForm1.Button2Click(Sender: TObject); begin Memo1.Lines.LoadFromFile('pruebabanco.txt'); end; procedure TForm1.BitBtn1Click(Sender: TObject); var csv : TStringList; fila : TStringList; i, j,y : Integer; aux,ceros:String; begin try Memo1.Clear; csv := TStringList.Create; // cargar a partir del fichero csv csv.LoadFromFile(Opendialog1.FileName); StringGrid1.RowCount:=csv.Count; fila := TStringList.Create; ceros:='00000000000'; ProgressBar.Max := csv.Count -1; y:=0; // recorrer las filas for i := 0 to csv.Count -1 do begin ProgressBar.Position := i; fila.Delimiter:=','; fila.CommaText:=StringReplace(csv.Strings[i],' ','',[rfReplaceAll]); // recorrer las columnas If UpperCase(fila[11]) = 'OPERADO' then Begin y:=y+1; aux:=copy(fila[2],0,pos('.',fila[2])-1); aux:=copy(ceros,0,11-length(aux))+fila[2]; StringGrid1.Cells[0,y]:=FormatDateTime('ddmmyyyy',Date()); StringGrid1.Cells[1,y]:=aux; StringGrid1.Cells[2,y]:=fila[4]; StringGrid1.Cells[3,y]:=fila[11]; Memo1.Lines.Add(FormatDateTime('ddmmyyyy',Date())+aux+fila[4]); End; end; MessageDlg('Lectura Exitosa..', mtInformation, [mbOK], 0); Except on E : Exception do begin MessageDlg('Ocurrio un Error: ' + E.Message, mtInformation, [mbOK], 0); end; end; // liberar la memoria csv.Free; end; end. Este es el código que utilice
#10
Escrito 02 julio 2013 - 11:19
Te paso código pero tu debes de agregar lo que falte, no me gustaría sentirme como que te hago la tarea![]()
![]()
Saludos
CUIDADO!!! SI TE HACE LA TAREA TE VA A LLEGAR LA FACTURA!!! EL EGO NO PERDONA!!
#11
Escrito 02 julio 2013 - 11:33
CUIDADO!!! SI TE HACE LA TAREA TE VA A LLEGAR LA FACTURA!!! EL EGO NO PERDONA!!
Pues claro, tengo hijos que mantener, mujeres que procurar y panza que consentir




Saludos
#12
Escrito 02 julio 2013 - 11:51
Saludos!!
#13
Escrito 02 julio 2013 - 01:48
...con la pura panza justificas los cobros...
No conozco a su esposa, pero los hijos salen MUY caros..., especialmente cuando se escucha "papá, préstame tu teléfono para jugar"...
#14
Escrito 02 julio 2013 - 03:43
#15
Escrito 02 julio 2013 - 05:36
hola disculpen después de realizar mi código alguien me podría ayudar para poder contar el numero de resultados (operados) o con que función podría aplicar este mismo gracias
Hola,
No se si te entendí bien tu pregunta, pero viendo el código yo diría que en la medida en que vas "trozando" y leyendo cada dato lleves la cuenta. Si es que a estos es lo que tu llamas operandos.
Te pediría que no seas tan escueto y expliques precisamente a que debemos entender por operando. Porque primero hablas de extraer datos pero ahora nos sales con "operando". Si te explicas mejor será más fácil asesorarte.
Saludos,