Newsgroup: it.comp.appl.access
Titolo: Caratteri di ritorno a capo: come si eliminano ?

Un festoso saluto a tutti,
ho un campo "descrizione" di tipo memo che contiene un testo attorno ai 500
caratteri fra cui dei ritorno a capo che mi creano dei problemi .
Vorrei  primo individuarli, magari con l'istruzione InStr all'interno di una
query, e quindi eliminarli... purtroppo pero' non riesco a beccarli in
nessun modo :-(
C'e' qualcuno che mi puo' dare una mano ?
GRazie
Fabio

"Spillo" <fa...@NOSPAMspilimbergo.com> ha scritto nel messaggio
news:DImLWWt...@newsmst.mcis.galactica.it...

La prima cosa che mi viene in mente....
magari non è la più efficiente... ma dovrebbe fungere...
Function PulisciStringa(MiaStringa as String) as String
    Dim Ch as String * 1 'Si risparmia memoria ?? mah? ai posters l'ardua
sentenza....
    Dim  x  as Integer
    Dim Comodo as String
    Comodo = ""
    for x = 1 to len(MiaStringa)
        Ch = mid(MiaStringa, x, 1)
        if asc(Ch) = 13 or asc(Ch) = 10  then   'intercettiamo i cr e i nl
non zi sa mai...
           Comodo = Comodo & " "
        else
            Comodo = Comodo & ch
        end if
   next x
    PulisciString = Comodo
end function
Secondo me diventa tutto di una lentezza spaziale....
magari c'è una API che fa già queste cose guardaci...
che con API si vola... (a volte anche sotto)
Ciao
Dario

Premesso che non si puo' compilare .mdb in .exe, on Sat, 30 Sep 2000


vediamo se riusciamo a migliorarla con instr:
function togliacapo(s as string) as string
dim p as long ' esageriamo...
dim oldp as long ' riesageriamo...
dim arrcrlf(1) as string
dim i as integer
arrcrlf(0)= chr(13)
arrcrlf(1)= chr(10)
oldp=1
for i = 0 to 1
	do
		p = instr(oldp, s, chr(i))
		if p = 0 then 
			exit do
		end if
		mid(s,p,1) = " "
		oldp = p+1
	loop
next i
togliacapo = s
end function
ho preferito anche io controllare separatamente il cr e il lf invece
che cercare la combinazione dei due perché proprio di recente ho
dovuto trattare dei testi di origine mac in cui a volte c'erano tutti
e due e a volte no...
inconvenienti: se ci sono tutti e due tra una parola e l'altra possono
esserci due spazi, ma pazienza, questo si risolve in un altro modo.
--
non studio non lavoro non guardo la tv
non vado al cinema non faccio sport
----------------------------------------
il sito comune di it.comp.appl.access:
http://members.xoom.it/it_db_access

Prova a sostituire i caratteri all' interno della stringa che hanno come
valore 10 e/o 13, con uno spazio !!
Con l' istruzione INSTR setta come stringa di ricerca chr$(10) e poi
CHR$(13)
Spillo <fa...@NOSPAMspilimbergo.com> wrote in message


 CHR$(13)
Ho provato sulle query ma mi ritorna sempre campi vuoti ...c'e' qualcosa che
non torna :-(

Grazie mille per il codice, potresti darmi ancora un suggerimento ?
Ho inserito la funzione e l'ho inserita sull'evento on_click di un
pulsante... ora mi manca di sapere come lancio la funzione e come gli dico
di andare a "ceccare" sulla tabbela "FILM" nel campo "DESCRIZ" ...
Grazie e perdona l'ignoranza!
Fabio


di andare a "ceccare" sulla tabbela "FILM" nel campo "DESCRIZ" ...
mah, non ho capito bene cosa vuoi fare... se vuoi lavorare
direttamente su una tabella devi anche sapere in che record (riga)
scrivere.
forse vuoi lavorare sul record corrente di una maschera collegata ad
una tabella.  allora puoi intervenire sui controlli della maschera,
non sui campi.  i controlli sono legati ai campi, per cui quello che
scrivi sui controlli va a finire nei campi ma campi e controlli non
sono la stessa cosa.
in questo caso, se il controllo si chiama descriz prova con:
me.descriz = true
se no spiega meglio...


Ci provo:
Ho una tabella che si chiama "FILM" composta da vari campi fra cui uno
"DESCRIZ" ovvero la descrizione del film e in cui si trovano anche i
"maledetti" caratteri di ritorno a capo che vorrei eliminare.
i record sono ca. 2800, mi piacerebbe che la funzione che mi hai postato
andasse a pescare record per record eliminando i caratteri di ritorno a
capo...
....ho creato una maschera con un pulsante di comando, ho inserito il codice
della funzione sull'evento "on-click" e ora mi manca il pezzo di codice che
lega la funzione ai record di quella tabella in quel campo...
Grazie mille per la tua cortesia!!
PS: se ti interessa un database di tutti i film su VHS aggiornato a
Settembre, te lo mando come premio! ;-)
Fabio


capo...
intanto fai una copia della tabella per sicurezza...
poi.  una funzione prende un valore e ne restituisce un altro, e
questa è una cosa.  esistono le query di aggiornamento, che modificano
i recorde questa è un'altra cosa.  le funzioni si possono usare nelle
query.  mischia tutto, cosa ottieni?
ottieni che apri una query, ci carichi la tabella, la trasformi in
query di aggiornamento, metti nella colonna il campo da aggiornare,
nella casella "aggiorna a" ci scrivi: NomeFunzione([NomeCampo]), e
vedi che succede...
questo è il metodo più rapido da spiegare e forse anche il più veloce
in termini di prestazioni.
una cosa didatticamente più utile sarebbe che ti aprissi un recordset
sulla tabella, lo scorressi tutto quanto e record per record editassi
il campo in questione.  qualcosa del genere:
dim rst as recordset
set rst=currentdb.openrecordset("nometabella")
do until rst.eof
	rst.edit
	rst!nomecampo = nomefunzione(rst!nomecampo)
	rst.update
	rst.movenext
loop


Settembre, te lo mando come premio! ;-)
Parli sul serio? 8-)
--
Lorenzo Coronati
--
<<Si perché forse Ilbo (ed altri come lui) sono 
convinti che noi poveri principianti (nel senso 
ironico) scrivano le domande senza pensare.>>
(Ivan Lelli, 25/08/2000)
--
<<se il lavoro non me lo dai tu, me lo da 
un'altro stronzo che non capisce una sega 
di access e di informatica in generale>>
(Ivan dal lavoro, 30/09/2000)
--

Ho provato ad attaccare il seguente codice ad un pulsante su una maschera:
Private Sub cmdPulisci_Click()
Dim rst As Recordset
Set rst = CurrentDb.openrecordset("FilmMySQL")
Do Until rst.EOF
rst.edit
rst!DESCRIZ = togliacapo(rst!DESCRIZ)
rst.Update
rst.MoveNext
Loop
End Function
Function togliacapo(s As String) As String
Dim p As Long ' esageriamo...
Dim oldp As Long ' riesageriamo...
Dim arrcrlf(1) As String
Dim i As Integer
arrcrlf(0) = Chr(13)
arrcrlf(1) = Chr(10)
oldp = 1
For i = 0 To 1
Do
p = InStr(oldp, s, Chr(i))
If p = 0 Then
Exit Do
End If
Mid(s, p, 1) = " "
oldp = p + 1
Loop
Next i
togliacapo = s
End Function
Ma Access 2000 non sembra gradire affatto :-(
Trova un errore di compilazione sulla riga "rst.edit" ... ho sbagliato
qualcosa?
Anche inserendo la funzione sulla Query di Aggiornamento ricevo un messeggio
di errore :-(
Se hai ancora un attimo di pazienza grazie, altrimenti andro' a manina ;-))

>Ho provato ad attaccare il seguente codice ad un pulsante su una maschera:
ecc.
mi pare vada bene...


 Parli sul serio? 8-)
Si, ma mi sa che faccio prima a mandarti tutto e a farmelo rimandare
indietro pulito dai ritorno a capo :-)
non ne salto fuori :-(
Ciao
Fabio ;-)

Dovendo esportare tabelle con campi memo in formato testo, e
viceversa, mi scrissi a suo tempo  delle righe, che con i seguenti
cambiamenti per te potrebbero andare bene:
Nota che i campi memo ( e binari)  devono venir trattati in maniera
diversa dai campi normali: 
Vedi i metodi GetChunk e AppendChunk  nell' Online help
La Sub ChiamalaComeTiPare e' parte estrapolata da una Sub molto piu'
lunga e complessa, che trattava piu' campi memo in Array, e spero di
non aver trascurato ne punti fermi ne punti esclamativi durante la
estrapolazione. 
Nella Funzione ErsetzeStr rimpiazzi naturalmete la stringa 
" NEUEZEILE "  con quella che ti serve  (" " per esempio)
MSAccess 08
Sub ChiamalaComeTiPare
Dim MemoWertStr as String 'Valore nel Memo
Dim MemoGrsLng as Long 'lunghezza del Memo
Dim MySet as recordset 
Dim MemoFld as Field
Set MySet = Currentdb.OpenRecordset ("Film")
With MySet
Set MemoFld = .Fields("Descriz")
 Do While Not .EOF
	 If Not IsNull(MemoFld) Then
		 MemoGrsLng = Len(MemoFld)
		 MemoWertStr = MemoFld.GetChunk(0, MemoGrsLng)
		 MemoWertStr = ErsetzeStr(MemoWertStr, 0)
		  .Edit
		  MemoFld = ""
		  MemoFld.AppendChunk MemoWertStr
		  .Update
	End If
	 .MoveNext
 Loop
End With
MySet.Close
End Sub
Public Function ErsetzeStr(TextInStr As String, NeuFlag As Integer) _
As String
'Parametri:
'TextInStr = Stringa da elaborare
'NeuFlag = 0  - Da Memo a Txt: 
' Rimpiazza  "Chr(13) & Cht(10)" con la stringa " NEUEZEILE "
'NeuFlag <> 0 Da Txt a Memo:
'Rimpiazza la stringa " NEUEZEILE " con "Chr(13) & Chr(10)"
Dim WorkTextStr As String, PointerInt As Integer
Dim NeuStr As String, SuchStr As String
Dim Msg as String
On Local Error GoTo ErsetzeStr_Err
   If NeuFlag = 0 Then
      NeuStr = " NEUEZEILE "
      SuchStr = vbcrlf
   Else
      SuchStr = " NEUEZEILE "
      NeuStr = vbcrlf
   End If
   If IsNull(TextInStr) Then
      ErsetzeStr = Null
   Else
      WorkTextStr = TextInStr
      PointerInt = InStr(1, WorkTextStr, SuchStr, 0)
      Do While PointerInt > 0
         WorkTextStr = Left(WorkTextStr, PointerInt - 1) & NeuStr & _
	 Mid(WorkTextStr, PointerInt + Len(SuchStr))
         PointerInt = InStr(PointerInt + Len(NeuStr), WorkTextStr, _
	 SuchStr, 0)
      Loop
      ErsetzeStr = WorkTextStr
   End If
ErsetzeStr_End:
   Exit Function
ErsetzeStr_Err:
   Msg = "Error Information..." & vbcrlf & vbcrlf
   Msg = Msg & "Function: ErsetzeStr" & vbcrlf
   Msg = Msg & "Description: " & Err.Description & vbcrlf
   Msg = Msg & "Error #: " & Format$(Err.Number) & vbcrlf
   MsgBox Msg, vbInformation, "ErsetzeStr"
   Resume ErsetzeStr_End
End Function
-- 
Tommaso Cafini                  _...@rhein-neckar.netsurf.de_
                                _tca...@gmx.net_
PGP-KeyID       = C922A2B1 
Key fingerprint = 7C 9E 72 C5 11 06 A7 67  54 03 FF 02 4C 90 39 F5