HP Forums
String Library - Printable Version

+- HP Forums (https://www.hpmuseum.org/forum)
+-- Forum: HP Software Libraries (/forum-10.html)
+--- Forum: HP Prime Software Library (/forum-15.html)
+--- Thread: String Library (/thread-5141.html)



String Library - Tyann - 11-16-2015 12:11 PM

Bonjour
Je vous propose une petite bibliothéque de fonctions traitant des chaînes de caractères.
Un fichier tetxe vous en détaille le contenu.
Espérant que cela vous sera utile.
Merci de vôtre attention.

Hello
I propose a small library of functions dealing with strings.
A Tetxe you file details the content .
Hoping that it will help.
Thanks for your attention.


RE: String Library - Tyann - 12-07-2015 09:43 PM

Bonjour
Je vous propose une nouvelle fonction à ajouter à la library:

Hello
I propose a new function to add to the library :

Code:
EXPORT EXTRACT(s,o)
//string,char or {char,num}
BEGIN
 LOCAL n:=-1,p,c;
 IF TYPE(o)==6 THEN
  c:=o(1);n:=o(2);
 ELSE
  c:=o;
 END;
 c:=typara(c);p:=INSTRING(s,c);
 n:=IFTE(n<0,DIM(s)-p+1,n);
 IF p==0 OR n==0 THEN
  "";
 ELSE
  MID(s,p,n);
 END;
END;
exemple:
example:
EXTRACT("250_km","_") -> "_km"
EXTRACT("250_km de bouchons",{"_",3}) -> "_km"


RE: String Library - Tyann - 12-23-2015 06:39 AM

Bonjour
Les fonctions LFORMAT ET RFORMAT ne fonctionnent pas correctement.
Exemple :
LFORMAT(16,2,"0") renvoie "0016" au lieu de "16".
Ceci est du à un bug de la fonction MAKELIST.
Voici une version corrigée de setstr qui est utilisée par ces deux fonctions:

Hello
The LFORMAT AND RFORMAT functions do not work properly.
Example :
LFORMAT (16,2,"0" ) returns " 0016 " instead of "16" .
This is due to a bug in the MAKELIST function.
Here is a corrected version of setstr that is used by these two functions:

Code:

setstr(c,n)
BEGIN
 LOCAL i,r;
 c:=typara(c);r:="";
 FOR i FROM 1 TO n
  r:=r+c;
 END;
 r;
END;
Sorry


RE: String Library - BruceH - 03-20-2017 03:30 PM

Another function: replace a placeholder in a string with another
e.g. SREPL("Hello %w", "%w", "world") -> "Hello world"

Code:
EXPORT SREPL(str, key, val)
BEGIN
  LOCAL p;
  p := INSTRING(str, key);
  CASE
    IF p == 0 THEN  // Not found
      RETURN str;
    END;
    IF str == key THEN  // Placeholder is whole string
      RETURN val;
    END;
    IF p == 1 THEN  // Placeholder at start
      RETURN val + MID(str, DIM(key)+1);
    END;
    IF p == (DIM(str)-DIM(key)+1) THEN  // Placeholder at end
      RETURN LEFT(str, p-1) + val;
    END;
    DEFAULT RETURN LEFT(str, p-1) + val + MID(str, p+DIM(key));
  END;
END;



RE: String Library - Tyann - 03-20-2017 08:39 PM

Bonjour

Sauf erreur, la fonction intégrée REPLACE permet cela.
Merci de vôtre intêret.

Hello

Unless you make a mistake, the built-in REPLACE function allows this.
Thanks for your interest.


RE: String Library - BruceH - 03-20-2017 10:18 PM

(03-20-2017 08:39 PM)Tyann Wrote:  Bonjour

Sauf erreur, la fonction intégrée REPLACE permet cela.
Merci de vôtre intêret.

Hello

Unless you make a mistake, the built-in REPLACE function allows this.
Thanks for your interest.

From the User Guide:

REPLACE("123456", 2, "GRM") -> "1GRM56"

but

SREPL("123456", "2", "GRM") -> "1GRM3456"


RE: String Library - Tyann - 03-20-2017 10:44 PM

Quote:
Code:
REPLACE("123456", 2, "GRM") -> "1GRM56"

but

Code:
REPLACE("123456", "2", "GRM") -> "1GRM3456"



RE: String Library - BruceH - 03-21-2017 04:36 PM

(03-20-2017 10:44 PM)Tyann Wrote:  
Quote:
Code:
REPLACE("123456", 2, "GRM") -> "1GRM56"

but

Code:
REPLACE("123456", "2", "GRM") -> "1GRM3456"

Ah, I see now what you are saying. You're right.