Impedire la modifica di una parola all'interno di una stringa in un in...

martedì 20 ottobre 2009 - 10.43

devilxx84 Profilo | Newbie

Buon giorno.

Ho una stringa del tipo

\n\t\select id \n from ec..... singleQuot;\n S singleQuot;..... \n\s end

io vorrei eliminare tutti gli \n\t\s presenti nella stringa (fin qui nessun problema)
tranne quelli che si trovano tra i due singleQuot.

Il mio risultato dovrà essere:
select id from ec..... singleQuot;\n S singleQuot;.....end

come posso fare?
Grazie mille

Pinky Profilo | Junior Member

Prova così:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Ciao
Alessandro

devilxx84 Profilo | Newbie

molto interessante come risposta. ho però ora un altro problema.

ho una stringa cosi composta:
SELECT singleQuot;test spaziosingleQuot; ID_UTENTE FROM EVM_UTENTE

se io faccio lo split con " " ottengo:
SELECT
singleQuot;test
"" io vorrei che tra test e spaziosingleQuot rimanessero i 3 spazi originali invece di solo 2. negli altri casi non m interessa.
""
spaziosingleQuot; praticamente vorrei che dopo lo split il contenuto dei singleQuot restasse immutato spazi compresi. Grazie per l'aiuto
ID_UTENTE io non sò più che pesci prendere
"
FROM
"
EVM_UTENTE

Pinky Profilo | Junior Member

Non credo di aver capito molto bene, comunque provo a risponderti.
Se fai lo split usando il carattere X otterrai un array di stringhe private di tale carattere.
Gli hai detto che X è il separatore ed ovviamente viene considerato un residuo.

1) Se fai la concatenazione delle stringhe (string.Join) usando il carattere X ritornerai alla situazione iniziale,
ovvero con tanti X quanti ce ne stavano inizialmente.

2) Se hai una stringa con tre spazi consecutivi e fai lo split indicando come separatore propio lo spazio,
mi aspetto (non ho provato) di ottenere ad esempio per "a b", 3 stringhe così composte: "a", " ", "b".
Se questo è vero (non ho al momento tempo di provare) facendo la concatenazione delle stringhe usando nuovamente lo spazio (anche dopo elaborazione delle stesse) riottengo i 3 spazi consecutivi iniziali.

Purtroppo il tuo esempio è poco leggibile, o non sono stato in grado di capirlo.

Ciao

[Edit]Come immaginavo neo messaggi postati gli spazi adiacenti vengono "troncati".
Al punto 2 "a b" sarebbe "a...b" dove i 3 punti sostituiscono 3 spazi.

devilxx84 Profilo | Newbie

Hai ragione, mi sono spiegato male.

Faccio un altro esempio:

Mettaiamo di avere la stringa "ciao mondo" (ovvero: ciao+ spazio+spazio+mondo)

io vorrei ottenere un vettore di 4 elementi: "ciao", " " , " " ,"mondo".

se faccio lo split con separatore lo spazio ottengo un vettore di 3 elementi "ciao"," ", "mondo".
e questo non è quello che vorrei.

Grazie per l'interessamento

Pinky Profilo | Junior Member

Nelle stringhe di esempio che seguono il carattere "." sostutisce " ".

Allora, in base alla esigenza particolare che hai non mi viene in mente altra soluzione che un "replace" fatto ad-hoc.

ovvero per avere "a", ".", ".", "b" splittando "a..b"
devi fare un replace di "." con "..".
In pratica in questo modo ottieni che il carattere "separatore" (nel tuo caso lo spazio) sia affiancato da un carattere uguale ma che in pratica viene visto come "contenuto".
Dovresti ottenere "a....b" che splittato con "." dovrebbe darti il risultato voluto (ovvero lo split mantenendo i separatori).

Non ho provato, è un'idea immediata se mi viene in mente altro te lo faccio sapere.

Penso comunque che ci sia una strada piu "genuina" usando le regular expression.

Ciao

devilxx84 Profilo | Newbie

Ciao,
ho utiliazzato una regular expression:
Regex regex = new Regex("( )");

string[] substrings = regex.Split("mia stringa");

e sembra funzionare...
Gentilissimo e disponibile grazie mille ancora
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5