Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Caratteri di ritorno a capo: come si eliminano ?

724 views
Skip to first unread message

Spillo

unread,
Sep 30, 2000, 3:00:00 AM9/30/00
to
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

Dario Fantoni

unread,
Sep 30, 2000, 3:00:00 AM9/30/00
to

"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

Lbo da casa

unread,
Oct 2, 2000, 3:00:00 AM10/2/00
to
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

lucifero

unread,
Oct 2, 2000, 3:00:00 AM10/2/00
to
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

Spillo

unread,
Oct 2, 2000, 3:00:00 AM10/2/00
to

lucifero <luc...@tiscalinet.it> wrote in message
8U_B5.60273$3R6.1...@news.infostrada.it...

> 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)

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

Spillo

unread,
Oct 2, 2000, 3:00:00 AM10/2/00
to
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

Lbo da casa

unread,
Oct 2, 2000, 10:34:13 PM10/2/00
to
>pulsante... ora mi manca di sapere come lancio la funzione e come gli dico
>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...

Fabius

unread,
Oct 3, 2000, 3:00:00 AM10/3/00
to
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

Lbo da casa

unread,
Oct 3, 2000, 3:00:00 AM10/3/00
to
>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...

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

Lorenzo Coronati

unread,
Oct 3, 2000, 3:00:00 AM10/3/00
to
Scrisse "Fabius" <fa...@NOSPAMspilimbergo.com>:

>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...

Questa funza dovrebbe andare, copiala in un modulo

Public Function TogliACapo(stringa As String) As String
If IsNull(stringa) Then TogliACapo = "": Exit Function
Dim strTemp As String
While InStr(stringa, vbCrLf) > 0
strTemp = strTemp & Left(stringa, InStr(stringa, vbCrLf)
- 1) & " "
stringa = Right(stringa, Len(stringa) - (InStr(stringa,
vbCrLf) + (Len(vbCrLf) - 1)))
Wend
TogliACapo = strTemp & stringa
End Function

Poi esegui un bel
update tabella set campo=TogliACapo(campo)

>PS: se ti interessa un database di tutti i film su VHS aggiornato a
>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)
--

Spillo

unread,
Oct 3, 2000, 3:00:00 AM10/3/00
to
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 ;-))

Lbo da casa

unread,
Oct 3, 2000, 3:00:00 AM10/3/00
to
>Ho provato ad attaccare il seguente codice ad un pulsante su una maschera:

ecc.

mi pare vada bene...

Fabius

unread,
Oct 4, 2000, 3:00:00 AM10/4/00
to
> >PS: se ti interessa un database di tutti i film su VHS aggiornato a
> >Settembre, te lo mando come premio! ;-)
> 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 ;-)

Tommaso Cafini

unread,
Oct 4, 2000, 3:00:00 AM10/4/00
to

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

0 new messages