![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Joer que facil, pues la verdad es que soluciona baste bien lo que queria hacer, pero de todas formas si no estubiera en lineas distintas como se podria hacer?
Por ejemplo bla bla SECUENCIA TRES DOS bla bla.. Lo que he hecho es correr memo.text[a] desde la posicion donde acaba SECUENCIA, y muevo el caracter leido a una variable string, busco que esa variable tome valor espacio ' ' y almaceno esa posicion, luego continuo hasta el siguiente espacio y hago memo.selstar:=posicion1; memo.sellength:=posicion2-posicion1 cadena2:=memo.seltext y luego saco esa cadena, el problema es si no esta en la misma linea y esta en la siguiente al hacer esto leo cosas raras como #$D y cosas asi y ya me pierdo, porque me pinta por el memo donde saco un cuadrado y cosas asi, yo pense que el enter era #10 o #13, si soluciona algo puedo tratar de pegar el codigo que uso. ASIAS |
|
#2
|
|||
|
|||
|
Hola, deberas crearte, por ejemplo, unas funciones para ir recorriendo la 'frase':
y luego ir recorriendo las 'palabras' en el texto
estas funciones por eso estan incompletas. No estoy seguro si identificara la ultima palabra , ademas de tener que tratarse los caracteres especiales #13, #10, etc...saludos PD: edito, y incluyo el stringreplace, y trim para eliminar espacios finales e iniciales. Última edición por coso fecha: 10-11-2008 a las 22:43:58. |
|
#3
|
|||
|
|||
|
Jo, me parece que me queda mucho por estudiar porque no he entendido practicamente nada de tu codigo coso, aun así muchas gracias, intentaré empaparme un poco mas a ver si me aclaro.
|
|
#4
|
|||
|
|||
|
en primerapalabra :
si pos(' ',o) = 0 entonces es que no hay espacios, por lo que el parametro o es una palabra. Si no es el caso y hay espacios, entonces se copia de o desde la posicion cero a la posicion del espacio (la primera palabra) en restofrase : si pos(' ',o) = 0 entonces no hay espacios, por lo que no hay resto de frase (es una sola palabra). Si si que hay espacios, entonces se copia de o desde la posicion del primer espacio hasta el final (el resto de la frase) los stringreplace sirven para descartar los caracteres #13, #10, etc... el bucle se conforma asi : mientras haya 'frase', se coge la primera palabra y se asigna a 'frase' el resto de la frase. Luego con la palabra cogida (s) tu ya haces lo que necesites. saludos. |
|
#5
|
|||
|
|||
|
Ahora mucho mas claro, pero aun asi perdona mi ignoracia pero entiendo que Result es lo que va a devolver la funcion ¿no? esque en el PseudoBasic que he programado no existian las funciones y todavia me lio porque por ejemplo ni entiendo muy bien la definicion de la funcion
function PrimeraPalabra(o : string) : string; entiendo que PrimeraPalabra es el nombre de la funcion, a continuacion (o:string) querra decir que se va a usar esa variable de tipo Sting y :String que el resultado de la funcion de PrimeraPalabra será del tipo String ¿eso seria igual que decir lo siguiente? Funcion PrimeraPalabra:string; var o:String; Begin ... Por otro lado en la segunda Funcion function Restofrase(o : string) : string; begin if Pos(' ',o) = 0 then result := '' else result := Copy(o,Pos(' ',o)+1,1000); end;comprobamos si hay alguna posicion en la haya un ' ' pero eso ya se ha hecho en la primera funcion ¿no? y por otro lado en la ultima expresion usamos copy(o,Pos(' ',o)+1,1000) pero al hacer eso suponemos que hay 1000 caracteres en el String entonces no se copiaran todos los signos raros esos que veo cuando uso el depurador #$D ¿? Asias por tu paciencia y siento hacer unas preguntas tan simples. |
|
#6
|
|||||
|
|||||
|
Cita:
Cita:
Cita:
Cita:
Cita:
|
|
#7
|
|||
|
|||
|
Ok, ya me queda mas claro,
al final he montado un codigo que hace lo que quiero aunque se complica demasiado Código:
procedure TFXY.Button5Click(Sender: TObject);
var
cadena1:string;
cadena2:string;
cadena3:string;
siguiente:string;
posicion:integer;
posicion1:integer;
posicion2:integer;
chivato:integer;
chivato2:integer;
a: Integer;
b: Integer;
label
kk;
begin
chivato:=0;
chivato2:=0;
cadena1:='ENTITIES';
posicion:=pos(cadena1,mtexto.Text);
a:=posicion;
while chivato=0 do
begin
kk:
a:=a+1;
cadena2:=mtexto.Text[a+7];
if (cadena2=' ')or
(cadena2=#10) or
(cadena2=#13) or
(Cadena2=#0) then
BEGIN
b:=a+1;
siguiente:=mtexto.text[b+7];
if (siguiente=' ')or
(siguiente=#10) or
(siguiente=#13) or
(siguiente=#0) then
goto kk
else
begin
posicion1:=a+7;
chivato:=1;
end;
END;
end;
while chivato2=0 do
begin
a:=a+1;
cadena2:=mtexto.Text[a+7];
if (cadena2=' ')or
(cadena2=#10) or
(cadena2=#13) or
(Cadena2=#0) then
BEGIN
posicion2:=a+7;
chivato2:=1;
END;
end;
mtexto.SelStart:=posicion1;
mtexto.SelLength:=posicion2-posicion1;
Mtexto.SetFocus;
cadena3:=mtexto.SelText;
memo1.Text:=cadena3;
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| contar numero de palabras en un string | lina maria | Varios | 9 | 19-05-2008 20:33:50 |
| 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 |
|