Newsgroup: it.comp.appl.access
Titolo: sostituire un carattere in una stringa, con un numero variabile di  spazi

Ciao a tutti. In Access XP sto cercando di sostituire il carattere
tabulazione presente più volte nella stringa di testo di un campo
memo.
Grazie ai suggerimenti ricevuti, sono arrivato al punto in cui devo
scorrere tutti caratteri della stringa nel campo memo, individuare in
che posizione si trova il VbTab e sostituirlo con un numero di spazi
che varia a seconda della lunghezza del pezzo di stringa che precede
il VbTab stesso.
In pratica, devo sostituire il VbTab, aggiungendo degli spazi fino ad
arrivare a 10 caratteri e quindi passare da:
XXXVbTabYYYYYVbTabWWVbTabZ
a
XXX-7spazi-YYYYY-5spazi-WW-8spazi-Z
so che per aggiungere spazi devo usare space$(10-len(ParteStringa))
dove ParteStringa è l'insieme dei caratteri+VbTab (es. YYYYYVbTab), ma
proprio non so come scorrere tutto il campo alla ricerca del VbTab e
"isolare" il pezzo di stringa da sostituire.
Qualche suggerimento?
Grazie a tutti in anticipo.
Giancarlo



Giancarlo
Ci sono molti modi... il primo che mi viene in mente è quello di sfruttare
il vbTab come
separatore per lo SPLIT.
Ottieni a questo punto un'array nel quale gli ITEMS sono esattamente i
blocchi di caratteri.
Ora cicli l'array e ricostruisci la stringa...
Function fSpace(strIN As String)
    Dim varArray As Variant
    Dim varCiclo As Variant
    Dim strFinale As String
    varArray = Split(strIN, vbTab)
    For Each varCiclo In varArray
        strFinale = strFinale & varCiclo & Space$(10 - Len(varCiclo) + 1)
    Next
    fSpace= strFinale
End Function
Provata così dalla finestra immediata:
?fSpace("XXX" & vbTab & "YYYYY" & vbtab & "WW" & vbTab &"Z")
Risultato:
XXX        YYYYY      WW         Z
Sembrerebbe più o meno corretta... ;-)
Ciao
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.alessandrobaraldi.it
---------------------------------------------------------------------------


Innanzi tutto ti ringrazio del prezioso suggerimento. Purtroppo ho
dimenticato di dirti che la stringa da convertire ha anche degli "a
capo" e mi sono accorto che la funzione nel suo ciclo (ovviamente)
considera il simbolo di "a capo" come tutti gli altri e quindi
passando alla riga sottostante gli spazi non sono aggiunti
correttamente. In pratica, se devo convertire:
\(TAB)sup2005(TAB)03001(TAB)10003(TAB)residuo(ACAPO)
03001(TAB)0(TAB)0(TAB)0(TAB)0(ACAPO)
la funzione trasforma il tutto in
\(15SPAZI)sup2005(9SPAZI)03001(11SPAZI)10003(11SPAZI)residuo(ACAPO)
03001(2SPAZI)0(15SPAZI)0(15SPAZI)0(15SPAZI)0
Come vedi, nella riga 2 la sostituzione del TAB con gli spazi non ha
funzionato, credo perchè la funzione considera tutta insieme la
stringa "residuo" della prima riga e "03001" della seconda e infatti
aggiunge 2 spazi perchè le due stringhe insieme sono di 12 caratteri,
più altri due (credo) per il ritorno a capo e l'avanzamento di riga.
Come faccio per fargli ricominciare il ciclo dopo l'"a capo"?
Grazie ancora.


 Grazie ancora.
Hai considerato l'idea di inserire i dati in una tabella (anche
temporanea), visto che di fatto hai in un unico campo un'intera tabella
con separatori di riga e di campo?
Cosě poi potresti lavorare piů comodo e usare i report per posizionare i
dati dove e come vuoi.
Ciao.
-Marco-
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 wrote in message 
news:9314bbfb-3934-4d9a...@u72g2000hsf.googlegroups.com...
Innanzi tutto ti ringrazio del prezioso suggerimento. Purtroppo ho
dimenticato di dirti...
[...]
===============================================
A questo punto - secondo me - dovresti proprio arrangiarti da solo!
Bruno

Mi associo al pensiero di Bruno... di tempo da perdere ne abbiamo sempre
meno ... devi ottimizzare.
Ora perņ puoi provare da solo.



provo a rispondere io che ho un po' più di tempo libero (forse c'è una 
soluzione più semplice). :-)
Private Sub NomeTuoPulsante_Click()
Dim vStringa As String
Dim vArrSplit
Dim vRis
Dim i As Integer
vStringa = Me.NomeTuaCasellaMemo
Me.NomeTuaCasellaMemo = ""
For i = 0 To Len(vStringa) - Len(Replace(vStringa, vbTab, ""))
    vArrSplit = Split(vStringa, vbTab)
    vArrSplit = vArrSplit(i)
    Me.Testo29 = Me.Testo29 + vArrSplit + Space$(10 - Len(vArrSplit))
Next
End Sub
p.s.: Io parto sempre dal presupposto che nessuno mi obbliga a rispondere. 
:-)
-- 
Ciao
Geppo 

...ops al posto di testo29 ricordati di mettere il nome della tua casella 
memo


 Geppo
Prova a partire anche da questo presupposto.
Ti metti a cercare una soluzione, impieghi mezz'ora,
un'ora, due ore (il tempo vola al computer, anche se
nessuno ti obbliga a starci e lo fai a tempo perso).
Invii la tua soluzione e il giorno dopo scopri che quel
coglione che ha posto il quesito ha dimenticato un
particolare che rende inutile la tua perdita di tempo.
Beh, dargli del coglione credo sia proprio fargli un
un complimento.
Ma si è sbagliato, non aveva considerato che...
Qualsiasi idiota ponga mano a qualcosa che poi non sa
districare si crede autorizzato a porre il quesito in un NG
ancor prima di essersi reso conto dei termini del problema.
Tanto che gli costa?
Beh, almeno chiamiamolo per nome!
Bruno 

 Bruno
Io ho il mio capo che gli ho dovuto spiegare 1000 volte come fare il taglia 
e incolla di una parte di immagine e tuttora me lo chiede ancora. Con questo 
non voglio dire che è un "coglione" anzi tutt'altro te lo posso assicurare. 
E solo che per alcune cose non è tanto portato, ma d'altro canto comunque le 
deve fare.
Con questo voglio dire che se ignoriamo qualcosa, cerchiamo una soluzione 
postando anche sul NG, ma da "ignoranti" non sappiamo come porre la domanda.
Per fortuna c'è sempre qualcuno, pronto a farci "capire", affinchè la 
domanda successiva sia un po' più dettagliata.
Io non faccio il programmatore, non ho mai studiato informatica (ho solo la 
terza media) insomma sono un ignorantone, però, a tempo perso, grazie anche 
ai NG anzi per lo più ai NG, qualcosina l'ho imparata.
Grazie anche a te Bruno, che delle volte mi hai risposto senza chiamarmi 
"coglione" (forse l'hai pensato). :-)
p.s.: tuttora certe cose non riesco a comprenderle son proprio di coccio eh.
-- 
Ciao
Geppo


Guarda, non voglio entrare in polemica con te, però non vedo perchè tu
debba offendermi. Darmi del "coglione" o "idiota", mi sembra una cosa
del tutto fuori luogo. Ho sempre cercato di rispettare le regole
dell'NG e se stavolta ho posto male i termini della questione, non
vedo il motivo di tanta acredine!
Sto cercando di risolvere il problema che ho descritto, ormai da molto
tempo, e solo dopo aver applicato il prezioso suggerimento di
Alessandro Baraldi, mi sono accorto di una altro problema che non
avevo considerato.
Se non sbaglio, anche altre persone che postano in questo NG "si
accorgono" o "aggiungono" delle cose ai loro post iniziali, ma non per
questo vengono apostrofate in questo modo!
Secondo me, hai ecceduto un pochino...potevi limitarti a quello che
avevi scritto in precedenza:
--------
A questo punto - secondo me - dovresti proprio arrangiarti da solo!
--------
p.s. io "coglione" non lo considero un complimento...:-)

 wrote in message 
news:c38c8bee-5cd9-4fc6...@p25g2000hsf.googlegroups.com...
Guarda, non voglio entrare in polemica con te, però non vedo perchè tu
debba offendermi. Darmi del "coglione" o "idiota", mi sembra una cosa
del tutto fuori luogo. Ho sempre cercato di rispettare le regole
dell'NG e se stavolta ho posto male i termini della questione, non
vedo il motivo di tanta acredine!
Sto cercando di risolvere il problema che ho descritto, ormai da molto
tempo, e solo dopo aver applicato il prezioso suggerimento di
Alessandro Baraldi, mi sono accorto di una altro problema che non
avevo considerato.
Se non sbaglio, anche altre persone che postano in questo NG "si
accorgono" o "aggiungono" delle cose ai loro post iniziali, ma non per
questo vengono apostrofate in questo modo!
Secondo me, hai ecceduto un pochino...potevi limitarti a quello che
avevi scritto in precedenza:
--------
A questo punto - secondo me - dovresti proprio arrangiarti da solo!
--------
p.s. io "coglione" non lo considero un complimento...:-)
========================================
Nessuno lo considera un complimento.
Ma ribadisco il concetto:
dopo aver perso tempo (a volte anche molto tempo) per
trovare una soluzione, ti vedi vanificato lo sforzo perché
chi ha posto il quesito si è "accorto di un altro problema che
non avevo considerato"...
Beh, se non ti viene da dire "ma guarda 'sto coglione..."
allora sei proprio un santo.
A me è venuto da dirlo.
Il peccato è stato scriverlo?
Bruno
PS
Se ho ben capito - e comunque non l'ho verificato - dovrebbe
essere sufficiente nella formula di Alex passare una stringa
S = Replace(S, vbCrLf, vbTab, 1, True)
dove S è la stringa contenente  vbTab e vbCrLf. 

 dove S è la stringa contenente  vbTab e vbCrLf.
Ti ringrazio del suggerimento. Ora provo. E' certamente molto più
efficace della soluzione che avevo trovato io, che fa fare un "giro" a
tutta la procedura ogni volta che trova un a capo...
 Function fSpace(strIN As String)
    Dim varArray As Variant
    Dim varCiclo As Variant
    Dim strFinale As String
    Dim Riga As Variant
    Dim MatriceRiga As Variant
    MatriceRiga = Split(strIN, vbNewLine)
    For Each Riga In MatriceRiga
        varArray = Split(Riga, vbTab)
        For Each varCiclo In varArray
            strFinale = strFinale & varCiclo & Space$(10 -
Len(varCiclo) + 1)
        Next
    strFinale = strFinale & vbNewLine
    Next
    fSpace = strFinale
End Function

 eh.
Adesso dentro di me sto pensando che queste ultime cose che hai
scritto sono proprio cazzate, che te le potevi risparmiare, che
l'auto commiserazione non serve proprio a nessuno.
Ma sono solo pensieri che metto per iscritto a solo scopo
dimostrativo.
Pensieri non dissimili da quelli che ti son passati per la testa
(nei miei riguardi) quando hai letto i miei post.
E allora?
Amici come prima! piů di prima!
Ok?
Bruno 

 Bruno
Grazie ancora per i tuoi interventi.
-- 
Ciao
Geppo 

 Bruno
Vedi Bruno il mondo è fatto da falsi moralisti che dietro ti insultano ma
davanti ti sorridono e se tu fai il contrario o meglio non adoperi quella
falsità di facciata(ed io come te sono uno di questi) allora fai brutta
figura....
La gente preferisce, e questa è sQuola con la Q, essere presa par il culo
con il guanto bianco
che ricevere un'osservazione spontanea anche se magari pesante.
Il motivo per cui io non mi sono mai offeso anche nei nostri contrasti è che
quando ho detto
quello che penso, e dall'altra parte anche ... penso che siamo contenti in
2(ma siamo in minoranza).
Beh mi consolo con il fatto che ultimamente il NG ha raggiunto un livello
troppo scadente, quindi
frequento sempre meno tecnicamente e mi diverto(ingiustamente) aprendo FLAME
anche per
la gioia di chi si lamenta di non vederne più ultimamente. ;-)
Ciao


 la gioia di chi si lamenta di non vederne più ultimamente. ;-)
bene, allora buon divertimento. :-)
--
Ciao
Geppo 

 la gioia di chi si lamenta di non vederne più ultimamente. ;-)
Sì, in effetti si assiste a un degrado del contenuto
(culturale, scientifico, tecnico... qual è la denominazione esatta?)
dei thread, sempre più caratterizzati dalla banalità delle richieste.
Frequento alcuni altri NG e rilevo ovunque la stessa cosa.
Direi che Internet, che per certi versi ha aperto molti nuovi
orizzonti, ha notevolmente impigrite le menti: non si cerca più
nell'Help e nei meandri dei Menu la soluzione, non si consulta
più un dizionario per vedere il plurale di coscia, si chiede in un NG.
Ti diverti coi flame?
È capitato anche a me di veder divampare il mio sangue
romagnolo, ma poi mi son sempre pentito.
Sana e robusta dialettica, satira e moderato sarcasmo
dovrebbero essere ammessi, senza però eccedere.
Ma questi non sono flame...
Bruno 

 Bruno
Ciao
@Alex

 @Alex
-- 
Ciao
Geppo 


Rispondo anche se non serviva... ma per cortesia..!
Quando vai da un meccanico non è essenziale che sia un Poeta... ma è
essenziale che sappia fare il meccanico...!
Se una persona si improvvisa meccanico non serve che sia un oratore ma
serve sempre che sappia almeno da che parte si deve aprire il cofano
per riparare la macchina....!
Quì con Access, si avvicinano Programmatori improvvisati che ancor
prima di capire di cosa parlano fanno domande... e quando gli si
risponde in modo TECNICO spesso non capiscono per un problema di
formazione e di informazione completamente assenti.
C'è poi da dire che l'approccio influisce... se l'utente si dimostra
sveglio nel senso della volontà... è tutt'altra cosa...
Purtroppo essendo un NG tecnico ritengo che la mia capacità di
rispondere Tecnicamente sia l'unica utile... i sorrisi o le cordialità
sono solo il passo successivo alla concretezza.
Altrimenti se si preferisce avere risposte da CORDIALI INCOMPETENTI a
me non riguarda.
Saluti
@Alex

 @Alex
Ricorda, inoltre, che alcuni utenti del NG a cui rispondi, anche se non ti 
conoscono di persona, ti stimano proprio per la tua competenza e per il tuo 
contributo al NG sia esso tecnico che meno tecnico.
Se la persona a cui rispondi in modo diciamo "rigido" è uno di loro ci 
rimane male due volte.
Lo so che forse non te ne puo' "fregare di meno", però ho voluto dirlo 
comunque. :-)
-- 
Ciao
Geppo 

 Geppo
