FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Recorrer un String
Hola. Tengo un problema:
Necesito recorrer nombre de archivos como String: ACA01-05-07-06.doc ó VA05-06-07-08.PDF y necesito identificar las primeras letras y enseguida ir formando otro string con las primeras letras más los siguientes dos digitos, ejemplo: ACA01 ACA05 ACA07 ACA06 VA05 VA06 VA07 VA08 y después de que va separando el string debe hacer un busqueda (función que ya tengo) en una BD. parte del codigo que estoy utilizando es este: Funcion para identificar Letras procedure TMain.OpenArrayLetras(const constArray: array of const); var i : Integer; begin for i := 0 to 54 {High(constArray)} do begin Abcd:=ConstArray[i].VChar; if Abcd=LetraFile then break; end; end; Funcion para identificar Numeros procedure TMain.OpenArrayNumero(const constArray: array of const); var i : Integer; begin for i := 0 to 9 {High(constArray)} do begin ABC123:=ConstArray[i].VChar; if ABC123=NumFile then break; end; end; procedure TMain.AdvSmoothButton4Click(Sender: TObject); var Letra, numero, Punto: Integer; Final, FinalNum, Plana, PlanaNum: String; begin //Punto:='.'; PkaCmp:='aca01-02-99-16.PDF'; punto:=Pos('.',PkaCmp); Delete(PkaCmp,Punto,4); //Delete(PkaCmp,Punto+1,3); for letra := 1 to Length(PkaCmp) do begin LetraFile:=PkaCmp[Letra]; OpenArrayLetras(['a','b','c','d','e','f','g','h','i','j','k','l','m','n','ñ', 'o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H', 'I','J','K','L','M','N','Ñ','O','P','Q','R','S','T','U','V','W','X','Y','Z']); if not (LetraFile=Abcd) then Begin //inicio de busqueda de nomenclatura Final:=PkaCmp; Delete(Final, Letra, Length(Final)); Plana:=Final; NomPub:=Plana; Memo2.Lines.Add(Plana); //termino de busqueda de nomenclatura //inicio de busqueda de dos digitos de la plana //Se elimina la nomenclatura y se dejan los numeros de página PkaCmp2:= Copy(PkaCmp,Letra,length(PkaCmp)); for numero := 1 to Length(PkaCmp2) do Begin NumFile:=PkaCmp2[Numero]; OpenArrayNumero(['0','1','2','3','4','5','6','7','8','9']); if Not (NumFile=ABC123) then Begin FinalNum:=PkaCmp2; PlanaNum:= copy(FinalNum, ((numero)-(2)),2 ); Digito:=PlanaNum; PlanaBusqueda:=NomPub+Digito; Memo2.Lines.Add(PlanaBusqueda); end; end; end; end; end; |
#2
|
||||
|
||||
Dos cosillas: primero, deberías utilizar las etiquetas [code]... [/code] (el botón con el símbolo "#" o uno de los tres siguientes)
Y segundo, ¿cuál es exactamente tu consulta? |
#3
|
|||
|
|||
buenas, soy nuevo aqui y haber q tal esta solucion
si hay algun error de codigo perdoneme |
#4
|
|||
|
|||
Recorrer Sting
Hola, creo que no me di entender mucho, pero aquí escribo el código ya corregido y cual es exactamente mi problema:
Gracias y saludos Código:
//Función para identificar letras procedure TMain.OpenArrayLetras(const constArray: array of const); var i : Integer; begin for i := 0 to 54 {High(constArray)} do begin Abcd:=ConstArray[i].VChar; if Abcd=LetraFile then break; end; end; //Función para identificar números procedure TMain.OpenArrayNumero(const constArray: array of const); var i : Integer; begin for i := 0 to 9 {High(constArray)} do begin ABC123:=ConstArray[i].VChar; if ABC123=NumFile then break; end; end; //Procedimiento (dentro de un botón) procedure TMain.AdvSmoothButton4Click(Sender: TObject); var Letra, numero, Punto: Integer; Final, FinalNum, Plana, PlanaNum, PkaCmp, PkaCmp2, PkaCmp3: String; begin //String que quiero leer. que puede ser de dos o tres letras //y de dos o cuatro pares de números: // 've56-21.doc' o 'jun01-06-82-11.pdf' PkaCmp:='aca01-02-99-16.PDF'; // al string le eliminamos la extensión y nos queda el string asi: // 'aca01-02-69--99-16' punto:=Pos('.',PkaCmp); Delete(PkaCmp,Punto,4); //se inicia el recorrido del string (PkaCmp) para buscar letras for letra := 1 to Length(PkaCmp) do begin LetraFile:=PkaCmp[Letra]; OpenArrayLetras(['a','b','c','d','e','f','g','h','i','j','k','l','m','n','ñ', 'o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H', 'I','J','K','L','M','N','Ñ','O','P','Q','R','S','T','U','V','W','X','Y','Z']); if not (LetraFile=Abcd) then Begin //inicio de busqueda de nomenclatura Final:=PkaCmp; Delete(Final, Letra, Length(Final)); Plana:=Final; //este es es resultado de las dos o tres primeras letras de string NomPub:=Plana; Memo2.Lines.Add(Plana); //termina el recorrido del string (PkaCmp) y nos encontramos dos o tres letras //inicio de busqueda de dos digitos de la plana //Se elimina la nomenclatura y se dejan los numeros de página PkaCmp2:= Copy(PkaCmp,Letra,length(PkaCmp)); for numero := 1 to Length(PkaCmp2) do Begin NumFile:=PkaCmp2[Numero]; OpenArrayNumero(['0','1','2','3','4','5','6','7','8','9']); if Not (NumFile=ABC123) then Begin FinalNum:=PkaCmp2; PlanaNum:= copy(FinalNum, ((numero)-(2)),2 ); //este es el resultado de los primeros dos digitos del string Digito:=PlanaNum; //en el primer recorrido ya tengo mi primer string (PkaCmp:='aca01') //y junto mus letras + mi primer digito y realizo una búsqueda //es donde tengo mi problema, si hago la busqueda de los primeros // tres digitos:'aca01' 'aca02' 'aca99' y el cuarto ya no lo hace PlanaBusqueda:=NomPub+Digito; Memo2.Lines.Add(PlanaBusqueda); end; end; end; end; end; |
#5
|
||||
|
||||
A ver, o no entiendo lo que quieres hacer o está muy complicado el método que usas.
Voy a partir de esto que pones en tu código: Cita:
La idea es: 1. Quitar la extensión 2. Separar la parte de las letras y la parte con la secuencia numérica. 3. Por cada número en la secuencia, formar una cadena compuesta por las letras y el número. La primera parte es muy sencilla usando la función ChangeFileExt. Para la segunda parte, si -como mencionas en el comentario- la cadena sólo puede contener dos o tres letras, entonces basta leer el tercer caracter para saber cuántas letras tenemos. Si es un número, quiere decir que sólo hay dos letras, y en caso contrario tres. Una vez determinado esto, es fácil separar las letras con la función Copy y, así mismo, la secuencia de números como 01-06-82-11. Ahora bien, esta secuencia consiste de números separados por un guíon. Así que, para aislar cada número, viene muy práctico el uso de un TStringList y su propiedad DelimitedText. Una vez que tengamos en una lista los distintos números, ya sólo es cosa de recorrer dicha lista y concatenar las letras con el número en turno. Aquí pongo la expresión de mi idea:
La forma de usar este procedimiento sería así, por ejemplo, para poner las cadenas resultantes en un Memo:
// Saludos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Recorrer y Cortar String | octalh | Varios | 6 | 28-11-2017 09:46:41 |
Recorrer un STRING | creus | Varios | 3 | 07-01-2007 22:52:37 |
Error al recorrer string | creus | Varios | 6 | 16-11-2006 22:39:45 |
recorrer string | emiliu | Varios | 2 | 16-11-2005 10:23:25 |
Recorrer un string | davidgaldo | Varios | 3 | 09-11-2005 10:04:28 |
|