Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Manipuler le texte d'une string! [ Divers / Débutant(e) ] (ELCouz)

mardi 25 mars 2008 à 20:39:35 | Manipuler le texte d'une string!

ELCouz

Cher Membres Delphifr,

J'aimerais effectué deux opérations bien simple...

voici mon texte example qui est contenu dans la string X

1234
texte non-fixe, aleatoire
philipe = "x"
martin = "y"
alain = "z"
autre texte imaginaire

la string peut etre tres longue et peu contenir entre 1k et 600k de texte donc jai penser pour recuperer les donnes philipe,martin et alain
soustraire toute le texte avant philipe et apres alain .. donc la string serais alors plus petite pour rechercher le texte plus rapidement...

pour ensuite recuperer le texte entre philipe = " et " meme chose pour martin et alain...

Ce qui me resume a vous poser deux simple questions

1. comment soustraire du texte avant et apres , un mot X et Y
2. comment extraire [emphase] efficacement et rapidement [/emphase] entre X = " et "

wiwi jai regarder des example de parser mais hmmm il doit i avoir plus simple., comme rester avec les trucs de delphi comme POS, set length etc etc
Et pour le regex oublier sa, c'est trop lent j'ai assayer

PS: Les ordis de mes clients n'ont pas tous des bombes comme ordinateur , donc ceci est un facteur a tenir compte.

Merci beaucoup de votre aide !

Laurent



mardi 25 mars 2008 à 23:27:05 | Re : Manipuler le texte d'une string!

ELCouz

ReBonjour ... un petit update...

pour ce qui est de trimmer la string jai trouver ceci...

function entre(strav : string;strap : string;source : string) : string;
begin
entre := avant(strap,apres(strav,source))   ;
end;

function avant(str : string;source : string) : string;
var
n : integer;
begin
n := pos(str,source);
avant := copy(source,1,n - 1);
end;

function apres(str : string;source : string) : string;
var
n : integer;
begin
n := pos(str,source);
apres := copy(source,n + length(str),length(source));
end;

Es-ce que je suis dans la bonne voie ?

C'est le moyen le plus rapide ?

Merci a toi , cher membre

Laurent

mercredi 26 mars 2008 à 15:05:01 | Re : Manipuler le texte d'une string!

Loda

Membre Club
Salut,

"Es-ce que je suis dans la bonne voie ?"


oui. c'est une voie.

"C'est le moyen le plus rapide ?" j'en doute. étudie un peu ton string. peut-être que tu peux utiliser posEx().

aussi, si tu veux "juste" extraire le string du milieux, fait deux pos/posEx puis UN copy. le tout dans la même function. (moins de manip/copy -> plus rapide)

aussi, tu peux faire une lecture incrémentale depuis ton premier Pos(philip). à toi de voir.

pour lire les "nom = valeur" il y a aussi les TStringList.Name / value ou eventuellement les Tinifile.

niveaux vitesse, je crois que les pchar avec test incrémentaux sont les plus rapide. mais cela dépend toujours du context.

voir http://www.prodelphi.de/ (tu peux utiliser la version gratuit dans une applic de test avec juste le bout de code a tester)

bonnes mesures,

Loda

PS: j'assume que tu as vu/lue/tester les codes de manipulation de chaîne de la frame "Derniers snippets pour Delphi".

Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.

jeudi 27 mars 2008 à 14:36:33 | Re : Manipuler le texte d'une string!

cirec

Membre Club Administrateur CodeS-SourceS
"j'assume que tu as vu/lue/tester les codes de manipulation de chaîne de la frame "Derniers snippets pour Delphi"."

Je dirai que non
 
@+
Cirec


jeudi 27 mars 2008 à 19:27:16 | Re : Manipuler le texte d'une string!

ELCouz

http://www.codyx.org/snippet_extraction-chaine-caracteres-partir-occurence-separator_131.aspx

Si vous parlez de cela... c'est justement ce que je ne veux pas faire

Je m'explique:

Voir fichier texte ici ---> Dump de la string

je doit extraire que certains valeur entres les "  " dont je connais le nom ... donc je ne peu pas dire que TOUT le valeur entre chaque " " sont importante a recuperer (ce que le snippet , quoi que pratique, de f0xi fait!)....

Autrement, je vois pas autre snippet delphi qui « pourrrais » m'etre utile!

Bonne journee

Laurent

jeudi 27 mars 2008 à 20:53:47 | Re : Manipuler le texte d'une string!

cirec

Membre Club Administrateur CodeS-SourceS
non c'est pas spécialement ce snippet qui était visé (quoi qu'il est très bon)
ils figurent en première page sur DelphiFr dans la rubrique : "Derniers snippets pour Delphi"

et il n'était dit nulle part qu'il existe une fonction qui fait exactement ce que tu demandes
par contre elles peuvent te mettre sur la bonne voie pour la créer toi même !!!

sinon quelle est la source de cette String ?
c'est toi qui la crée ?

si oui tu te prends la tête pour rien

 
@+
Cirec


jeudi 27 mars 2008 à 21:33:51 | Re : Manipuler le texte d'une string!

cirec

Membre Club Administrateur CodeS-SourceS
Le pire ... c'est que encore une fois il y avait tout et sous tes yeux :

Le lien se trouve en première page :
http://www.codyx.org/snippet_recuperer-chaine-inconnue-placee-entre-deux-chaines-connues_334.aspx


Implementation

{$R *.dfm}
Uses StrUtils; {Indispensable pour PosEx}
Var aStr : String = '1234;texte non-fixe, aleatoire;philipe = "x";martin = "y";alain = "z";autre texte imaginaire';
Function MidStr(Const S, SLeft, SRight: String): String;
Var
  
PosLeft, PosRight: Integer;
Begin
  
PosLeft := Pos(SLeft, S);
  If PosLeft < 1Then Exit;
  Inc(PosLeft, Length(SLeft));
  PosRight := PosEx(SRight, S, PosLeft);
  If PosRight < 1Then Exit;
  Result := Copy(S, PosLeft, PosRight - PosLeft);
End;
 
Procedure TForm1.Button1Click(Sender: TObject);
Begin
// Attention a respecter la Case
  
Label1.Caption := MidStr(aStr, 'martin = "', '"');
End;

Pour la case ça peut s'arranger on peut facilement la modifier ...
Mais dans tous les cas un peut de rigueur s'impose. Il faut choisir entre mettre un espace ou non entre le signe = parce que dans ton exemple on y trouve de tout !!!!

Mes précédentes questions restent toute fois d'actualité
 
@+
Cirec


jeudi 27 mars 2008 à 23:42:18 | Re : Manipuler le texte d'une string!

ELCouz

Merci Cirec!

en fait cest du code dun script javascript tirer du site UPS (en fonction du tracking number du colis) dont jai trimmer et garder que lessentiel ... jai virer tout les CR+LF comme tu a pu voir.

Je vais tester ton code ... en meme temps que tu a posté ta reponse jai aussi trouver un code qui marche ... coté performance tu peu me donner ton avis ?

function InStr(Start: integer; Source: string; SourceToFind: string): integer;
begin
Result := pos(SourceToFind,copy(Source,Start,Length(Source) - (Start - 1)));
end;

function obtaintxt(startdel:string;enddel:string;source:string):string;
var
startpos: integer;
begin
startpos :=InStr(Pos(startdel,source)+Length(startdel)+1,source,enddel);
result:= Copy(source,Pos(startdel,source)+Length(startdel),startpos);
end;



donc avec

edit1.text :=  obtaintxt('status = "','"',temp); //temp etant la string contenant le output ups.txt que jtai montrer

jobtien donc delivered dans la string [...] status = "delivered" [...]

Autre question comment fait tu pour calculer la performance dune function vs un autre ?

C-a-d comment calculer combien de cycle cpu prend a executer X function ?
Je sais que c possible , car je developpe pour du embedded et dieu sais que lefficaciter est tres important sur cest platforme la mais cetais sous un debugger en C. Avec delphi aucune idee comment proceder


Salut et a + !

Laurent



vendredi 28 mars 2008 à 13:53:30 | Re : Manipuler le texte d'une string!

Loda

Membre Club
re,

dans InStr, si tu connais un offset: utilise posEX!!!! et non pas un pos(s,copy(...)) !

"Autre question comment fait tu pour calculer la performance dune function vs un autre ?"
voir, par exemple,  http://www.prodelphi.de/ pour mesurer les performances (nb de cycle cpu) de ton prog.

sinon, tu peux faire tourner ton code en boucle 10'000x en utilisant un getTickCount avant et après. c'est pas une vrai mesure, mais ça donne une bonne idée.

"jai virer tout les CR+LF comme tu a pu voir."
pourquoi?? je veux dire: pourquoi perdre du temps (CPU) à virer une partie du string si tu veux juste extraire un sous-string?

bon code,

Loda

Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.

samedi 29 mars 2008 à 07:33:19 | Re : Manipuler le texte d'une string!

ELCouz

Je vais assayer le truc ProDelphi , sa l'air bien

"jai virer tout les CR+LF comme tu a pu voir."
pourquoi?? je veux dire: pourquoi perdre du temps (CPU) à virer une partie du string si tu veux juste extraire un sous-string?

en fait ... la vrai string de depart cest la page en code html (80k) dont jai garder que lessentiel ... couper avant et apres la section javascript contenant certain variable dont je veut extraire.... ah oui pour les CR+LF cest bien simple.... cest beaucoup plus facile pour moi de localiser du texte en RegEx comme sa

<br><table><td><b>bob</b></td><td><b>bob2</b></td><td><b>bob3</b></td></table>

que comme sa

<br>
<table>
<td>
<b>
bob
</b>
<b>
bob2
</b>
</td>
</table>

car oui lindentation sur certain site est aussi nul que cela !!!


Jespere avoir satisfait tes questions

Merci Loda de ta réponse,

Laurent


1 2

Cette discussion est classé dans : texte, string, simple, martin, alain


Répondre à ce message

Sujets en rapport avec ce message

remerciements [ par BRIVE ] Votre texte ICIVotre texte ICIBONJOURPour DELPHIPROGBien vu.Dans mon record la longueur du string n'était pas précisée.Lors de la lecture par seek,cel Executer du code texte [ par Niki2001 ] Est-il possible d'exécuter du texte (sous forme de string) qui, évidemment, représenterait un code Delphi correct? Exemple:var   Str: string;   i: int Remplacement de caractères pour chaques lettres [ par tony1239456 ] Bonjour, je voudrais savoir si il existe une fonction permettant de remplacer des caractères dans une chaine différents pour chaques lettres. Par exem Changer la couleur d'un texte au passage de la souris [ par mathieu49 ] Bonjours à tous, j'aimerais savoir comment modifier l'aspect d'un texte au passage de la souris mais sans avoir à cliquer dessus. Merci Ajouter un item de ComboBox dans une listview [ par maxoudu328 ] Bonjour, N'arrivent pas a ajouté un item d'un combobox directement via cette commande : ListAjout.SubItems.Add(ComboBox1.items); A cause de l'imco Imprimer un imageList [ par dugueclin ] Bonjour à tous,j'ai un problème lorsque j'imprime mon StringGrid: dans la procedure OnDrawCells du StrinGrid, si la ou les cellules de la colonne 8 so cellule stringgrid en mode edition [ par philpas ] bonjour,je voudrais savoir comment faire pour qu'une cellule stringgrid soit en "mode edition". Je sais goEditing doit être égal à True. Mais je m'exp Composant TIdIRC [ par coussimac ] salut à tous j'aimerais avoir un peu t'aide sur ce compo 1/je veux c'est récupérer le texte que me renvois une personne du chan l'évènement onmessag justification du texte dans tlabel ou statictext ? [ par lepotager ] bonjour, je débute en delphi 7 (oui je sais ce n'est pas le dernier mais bon...). je voudrai avoir des label ou des statictext (c pour mettre du text Recherche source pour rechercher une string dans un memo [ par zvoul ] Je recherche des sources pour rechercher des strings dans un fichier  de manière optimisé mais en ayant un bon rapport vitesse/utilisation processeur


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.