Newsgroup: it.comp.lang.javascript
Titolo: Sostituzione di un carattere.

Salve a tutti.
Problema forse banale, ma...
Se ho la stringa:
var pippo = "ABCDEF";
e, a un certo punto, voglio sostituire il carattere D
con M, come posso fare?
Se non erro, non si può trattare la stringa come un array,
come in Pascal o in C; d'altra parte, il metodo replace
delle stringhe è un bel casino; le RegExp mi sono
abbastanza ostiche e, comunque, in questo caso non
saprei come fare per indicare il carattere n° 3, la D appunto.
Grazie a chi mi aiuterà, Massimo.

 con M, come posso fare?
pippo=pippo.replace(/D/gi,"M"); ? 
(togli la i se non vuoi che sostituisca anche le d minuscole, togli la g se
vuoi sostituire solo la prima occorrenza)
-- 
"Ho smesso di fumare.
 Vivrò una settimana di più.
 E in quella settimana pioverà a dirotto"
									    W.A.

 saprei come fare per indicare il carattere n° 3, la D appunto.
Ecco, spiega un po'. Vuoi sostituire in terzo carattere con "M", o la "D" con
"M"? Sono due cose diverse.
Inoltre, il metodo "replace" accetta anche una stringa come primo parametro,
solo che ti sostuisce unicamente la prima occorrenza che trova, non tutte. Nel
tuo caso basterebbe. Ma se tu avessi due "D" da sostituire con "M", ti
sostituirebbe solo la prima.
-- 
Chuck Norris non ha bisogno di una donna per procreare: da un suo brufolo è
nata la stirpe dei draghi.

Grazie.
Ho voluto generalizzare e quindi ho reso vana la tua risposta.
Il mio caso pratico è:
ho una stringa di 5 caratteri che possono essere o C o M
(indicano il routing di un pallet in lavorazione,
C=stazione di Carico
M=Macchina).
Devo poter modificare la stringa (un carattere alla volta);
da un'altra funzione mi viene che il carattere i-esimo deve
diventare, ad esempio, M. Ma ci possono essere già altri M
che non devono essere modificati.
L'unico modo penso sia fare così:
var ca="M"; //carattere da applicare...
var posto=2;// ...al posto i-esimo
var stato="CMCMC";//stringa originale
var nuovostato="";
for (cnt=0 ; cnt<4 ; cnt++)
  if (cnt == posto)
    nuovostato += ca.charAt(0);
  else
    nuovostato += stato.charAt(cnt);
stato = nuovostato;
Non vedo altre soluzioni.
Grazie.

 che non devono essere modificati.
Così su 2 piedi:
 var pippo="ABCDEFGHI";
 var pos2Sost=4; var Char2Sost="M";
 var re=new RegExp("(.{"+(pos2Sost-1)+"})(.{1})");
 pippo=pippo.replace(re,function(tot,p1,p2) {return p1+Char2Sost});
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.

 Non vedo altre soluzioni.
Eeeeh.. ce ne sono tante. Anche senza scomodare le regexp. :)
-- 
Quando la domenica Chuck Norris riceve la comunione durante la messa, al posto
dell'ostia pretende un doppio cheesburger fumante.

 Eeeeh.. ce ne sono tante. Anche senza scomodare le regexp. :)
:-) ma sono così carine ...
-- 
"Voi abili a tenere sempre un piede qua e uno là
 avrete un avvenire certo in questo mondo qua
 però la dignità
 dove l'avete persa?"
									    V.R.

 :-) ma sono cosě carine ...
Ho capito, ma ricordati una delle "massime" che amo utilizzare in informatica:
quando hai in mano un martello, tutto ti sembra un chiodo. :)
Va bene usare le regexp, ma non sempre ce ne č bisogno; soprattutto se l'OP
non le conosce, rischia di avere un po' le idee confuse.
E, soprattutto, non c'era bisogno di usare una regexp con una funzione di
callback, suvvia! :D
E' come se per schiacciare una mosca in cucina, gli scaraventi addosso il
tavolo: il risultato lo ottieni cmq, ma .. beh.. :)
-- 
Chuck Norris annega i pesci.

Ma quanti bei trucchettini che ho imparato oggi!
Grazie davvero a tutti e due.
Esilaranti anche i versetti su Chuck Norris!
Ciao.

 non le conosce, rischia di avere un po' le idee confuse.
a me è sembrata la via più "bella", la strada della substr è proprio
"brutta" (sto parlando di estetica in informatica !-!, direbbe la mia
compagna "è meglio se prima pensi alla tua di estetica che fa schifo") :-)


 "brutta" (sto parlando di estetica in informatica !-!,
Se parliamo di estetica dell'informatica, sono "esteticamente" migliore i due
codici che ho pubblicato io allora. Quello con la regexp, tra il fatto che la
componi tramite oggetto e stringa, tra la funzione di callback risulta un po'
"stipata" e confusionaria. Mi immagino per uno che non le conosce! :)
Mentre sia il codice che utilizza le substr, sia quello che usa gli array, è
più "pulito", "candido" e soprattutto leggibile e comprensibile anche a chi
non se ne intende.
Nell'altro manco l'indentazioni o spazi ci hai messo, e mi parli di estetica??
;P
Mi hai anche messo due var accanto! :D
Nono, non se ne parla.. e cmq se proprio volevi usare le regexp potevi fare
benissimo a meno della funzione di callback (che ti ricordo tra l'altro che su
alcune versioni di IE non va, se ne è anche riparlato recentemente), il codice
sarebbe stato un po' più "pulito" ed "esteticamente" migliore. :)
-- 
Alla domanda di una giornalista "E' vero che ha contato due volte fino ad
infinito" dopo un paio di secondi Chuck Norris ha risposto "Ora sono tre".
Subito dopo ha preso a calci rotanti la giornalista che aveva dubitato di lui.

 sarebbe stato un po' più "pulito" ed "esteticamente" migliore. :)
:-) usando il $1-$n, intendi? mi sta antipatico ...


 :-) usando il $1-$n, intendi? mi sta antipatico ...
ARGH! Ho capito, ma preferisci scrivere codice che su IE<5.5 non va mandandoti
in errore lo script?? :D
-- 
Uri Geller è stato in grado di piegare a metà un cucchiaio con la forza del
pensiero. Chuck Norris è stato in grado di piegare a metà Uri Geller con la
forza del pensiero

 in errore lo script?? :D
:-) in effetti ... ma IE5.0 oramai va schifato, nelle mie statistiche
risulta < 1.4% sull'utente finale ... ... ... ... ... ok, hai ragione.


 risulta < 1.4% sull'utente finale ... ... ... ... ... ok, hai ragione.
gh. ^_^
-- 
Chuck Norris ha risolto il problema della fame nel mondo sterminando l'intera
specie umana.