Newsgroup: it.comp.appl.access
Titolo: Spaziatura caratteri.

Ciao a tutti voi,
vorrei sottoporre il mio problema, principalmente agli esperti di VB per 
access.
Ho già ottenuto diverse valide risposte da un altro partecipante a questo 
NG, il quale mi ha indirizzato a cercare informazioni appunto sulla 
spaziatura caratteri all'interno dei gruppi di Google, e qui ho trovato 
qualcosa che può fare al caso mio.
Ho trovato del codice scritto per spaziare una parola:  "aiuto" diventa "a i 
u t o".
Il codice è il seguente:
Public Function TestoSpa(testo As String, numspazi As Integer) As String
Dim Lung As Integer
Dim i As Integer
Lung = Len(testo)
TestoSpa = Left(testo, 1) & Space(numspazi)
For i = 2 To Lung
    TestoSpa = TestoSpa & Mid(testo, i, 1) & Space(numspazi)
Next
MsgBox TestoSpa
End Function
Questo funziona e ti fa inserire quanti spazi desideri.
Ciao.
----------------------------------------------------------------------------------------
Mi domandavo se era possibile adattare questo codice al mio problema. 
Pensavo fosse possibile scrivere una function, attivabile con un pulsante di 
controllo in un menu, che apre una tabella (miatabella), che legge i dati 
dei campi e mi restituisce un file ASCII, (un file TXT) contenente i dati 
dei singoli record della miatabella, spaziati ognuno obbligatoriamente, per 
come mi sono stati richiesti. Fare questo lavoro manualmente richiederebbe 
un sacco di tempo,
oltre che una estrema precisione, col rischio di vedermi scartare i record 
con i dati che non rispettano tale formattazione.
Ho già fatto delle prove a mano, ma a nulla è valso tentare di formattare i 
dati utilizzando punti di tabulazione, perchè in presenza di doppi nomi e 
doppi nomi per cognome, word non rispetta le tabulazioni per mancanza di 
spazio sulla riga orizzontale.
Il destinatario del mio lavoro mi richiede un file ASCII con le seguenti 
caratteristiche:
Il file delle richieste  deve essere  in formato ASCII  ed avere il seguente 
tracciato:
i campi sono a  lunghezza fissa e pertanto non necessitano di separatori. la 
sequenza è:
35.............................35................................35.................................10......................24....................1
cognome...................nome............................luogo di 
nascita............data di nascita...paternità..........sesso.
cognome: occupa 35 caratteri alfanumerici;
nome: occupa 35 caratteri alfanumerici (da 36 a 70);
luogo di nascita: occupa 35 caratteri alfanumerici (da 71 a 105);
data di nascita: occupa 10 caratteri alfanumerici (da 106 a 115);
Paternità: occupa 24 caratteri alfanumerici (da 116 a 139);
Sesso: occupa 1 carattere alfanumerico (a 140)
Mi sono chiesto se è possibile adattare con qualche modifica, il codice 
sopra riportato per il caso della casella di testo, che restituisce una 
parola con uno spazio fra una lettera e l'altra, ma a me non serve spaziare 
una parola, bensì mi serve creare un tracciato, un record con una sequenza 
di dati con una spaziatura ben precisa tra un dato e l'altro perchè ho 6 
campi in tabella, ognuno con un dato da gestire.
Sono nelle Vs. mani, altrimenti il destinatario mi chiederà di stampare su 
carta i dati dei singoli campi e così avrò le risposte con un ritardo 
notevolissimo. Grazie in anticipo a tutti gli esperti che mi aiuiteranno a 
risolvere questo rompicapo. Giuseppe.

 ha scritto nel messaggio
news:TfKje.110977$IN.18...@twister2.libero.it...

Io credo che tu stia predendo la strada sbagliata.
Partendo dal fatto che un file ASCII non è altro che un file di testo non
formattato, WORD o qualsiasi altra diavoleria non va usata.
Se ti leggi le specifiche di esportazione dati con il Metodo TransferText
tratte dall'Help in linea, senza fare troppe ricerche, scopri che è
possibile
in automatico esportare un File di Testo a spaziatura FISSA, che se non
ho capito male è proprio il tuo caso.
Se poi dovessi avere esigenze più particolari, sempre leggendo il medesimo
argomento scopri che è possibile impostare un riferimento ad un file di
Specifiche
che casualmente è proprio quello che potrebbe risolveri il problema.
Fatti un file ASCII, a mano, con una sola riga formattato come serve, ed
importalo
con il Wizzard, ad un certo punto avrai la possibilità di andare nei
Dettagli dell'Importazione
e da li puoi impostare in modo semplice ed efficace tutta la
parametrizzazione del
file.
Devi dare un nome a questa formattazione, e potrai richiamarla sia in
IMPORTAZIONE
che in ESPORTAZIONE.
Facci sapere se questo ti ha semplificato la questione.
Ciao
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------

 ha scritto nel messaggio 
news:d6ns0s$2hr$1...@domitilla.aioe.org...

Grazie per i tuoi chiarimenti, almeno così imboccherò la strada giusta.
Purtroppo ora non posso applicare quanto mi hai detto perchè il problema è 
fermo in ufficio. Però vorrei capire un'altra cosa. Ho una tabella con sei 
campi (cognome, nome ecc...), creata con una query di creazione tabella che 
estrae i dati solo dai campi da me selezionati. A questo punto io devo 
esportare tutti i dati di questa tabella, sei campi per ogni record, 
all'esterno del database e in una cartella scelta da me, in un file di testo 
che poi è un file ASCII, quindi modificabile con notepad se ho ben capito, e 
qui word non c'entra niente. Forse io non ho mai usato usata la procedura da 
te descritta, la procedura di esportare i dati di una tabella in un foglio 
di calcolo o di importare i dati dall'esterno quella la conosco partendo dal 
menu file.
Passando all'atto pratico io come devo procedere ? Apro il notepad e mi creo 
un file a cui do un nome, ad esempio Pippo; poi all'interno cosa faccio? Hai 
detto di scrivere una sola riga formattata come serve. Come ? Se ho ben 
capito questo file può essere usato come un modello di riferimento da 
importare attraverso le specifiche di formattazione. In che modo devo 
impostare la spaziatura tra un campo e l'altro ? Che cosa scrivo in una sola 
riga ? Forse questa è la cosa più stupida da fare. Mi puoi creare un esempio 
da adattare poi al caso mio? Così lunedi mattina mi metto subito all'opera e 
creo sto benedetto file da inviare al destinatario del lavoro da me 
richiesto.
Grazie di tutto e soprattutto per la pazienza che avete voi tutti qui. 
Giuseppe. 

 ha scritto nel messaggio 
news:rkMje.20333$795.6...@twister1.libero.it...

Ciao,
Alessandro è stato abbastanza chiaro:
1) apre il blocco note di windows o un qualsiasi editor di codice ascii...
2) scrivi una riga come da te formattata con gli spazi etc...ovviamente gli 
passi i valori ...ad es. i tuoi dati anagrafici
secondo il tuo schema
 35.............................35................................35......... ........................10......................24....................1 cognome...................nome............................luogo di nascita............data di nascita...paternità..........sesso.3) Salvi il file es. prova.txt4) in access: cari dagli esterni-> importa (selezioni file di testo) eprocedi scegliendo a larghezza fissa e quindi  vai in avanzate perdeterminare il tipo di dati, l'inizio, la lunghezza etc MA ANCHE PER SALVARELA SPECIFICA DI IMPORTAZIONE che potrai richiamare in un secondo momentocliccando  su "specifiche"5)Alla fine sei crei una nuova tabella puoi controllare, in modalitàstuttura, se sono stati mantenute le tue direttiveSe tutto è ok applichi la specifica all'intero file...Buona serata :-)Gaspare

 Giuseppe.
Scusa per l'impaginazione...ci riprovo
Ciao,
Alessandro è stato abbastanza chiaro:
1) apre il blocco note di windows o un qualsiasi editor di codice ascii...
2) scrivi una riga come da te formattata con gli spazi etc...ovviamente gli 
passi i valori ...ad es. i tuoi dati anagrafici
secondo il tuo schema
 35.............................35................................35.................................10......................24....................1cognome...................nome............................luogo dinascita............data di nascita...paternità..........sesso.3) Salvi il file es. prova.txt4) in access: cari dagli esterni-> importa (selezioni file di testo)eprocedi scegliendo a larghezza fissa e quindi  vai in avanzateperdeterminare il tipo di dati, l'inizio, la lunghezza etc MA ANCHE PERSALVARELA SPECIFICA DI IMPORTAZIONE che potrai richiamare in un secondomomentocliccando  su "specifiche"5)Alla fine sei crei una nuova tabella puoi controllare, inmodalitàstuttura, se sono stati mantenute le tue direttiveSe tutto è okapplichi la specifica all'intero file...Buona serata :-)Gaspare


Grazie Gaspare anche per il tuo suggerimento.
Non discuto sulla chiarezza di Baraldi, sono io che mi stavo complicando la 
vita. A volte le cose semplici mi appaiono
complicate. Lunedì quando sarò di nuovo al lavoro tradurrò in pratica tutto 
quanto qui è stato chiarito grazie a voi.
Ciao e buona notte. 

 ha scritto nel messaggio 
news:hCPje.111362$IN.18...@twister2.libero.it...

Ciao e buona domenica :-)
Gaspare 

 ha scritto nel messaggio 
news:utTje.1421610$35.53...@news4.tin.it...

Ciao Gaspare,
anche se non ho i dati, qui a casa ho fatto comunque delle prove creando una 
tabella delle specifiche di formattazione
dei campi. Non mi è chiara una cosa. La tabella con le spcifiche deve 
contenere 6 campi, ognuno con la larghezza richiesta, o un solo campo, largo 
140 caratteri (35+35+35+10+24+1) con una sola riga contenente anche tutti 
gli altri campi opportunamente spaziati fissando i limiti durante 
l'importazione ? Di seguito puoi vedere quello che ho ottenuto.
1a specifica
  Specifiche spaziatura fissa_3 Campo1
      Cognome----------------------------Nome-------------------------------Luogodinascita---------------------ddnascita-paternita---------------s
2a specifica
  Specifiche spaziatura fissa_2 Campo1 Campo2 Campo3 Campo4 Campo5 Campo6
      Cognome----------------------------  
Nome------------------------------- Luogodinascita---------------------  
ddnascita- paternita--------------- s
Grazie per la pazienza. Ciao, Giuseppe. 

 ha scritto nel messaggio 
news:iN1ke.112003$IN.19...@twister2.libero.it...

Ciao,
sulla base di quello che ti ha detto Alessandro:
Fatti un file ASCII, a mano, con una sola riga formattato come serve, ed
importalo con il Wizzard, ad un certo punto avrai la possibilità di andare 
nei
Dettagli dell'Importazione e da li puoi impostare in modo semplice ed 
efficace tutta la
parametrizzazione del file.
Devi dare un nome a questa formattazione, e potrai richiamarla sia in
IMPORTAZIONE che in ESPORTAZIONE.
Io credo che devi operare nel seguente modo:
ti crei  una riga come la seguente con il blocco note
Cognome----------------------------Nome-------------------------------Luogodinascita---------------------ddnascita-paternita---------------s
salvando il file devi poi importarlo in access: considera l'impostazione a 
larghezza fissa ed andando avanti puoi inserire le frecce di separazione e 
quindi se vai in avanzate vedi che automaticamente si creeranno 6 campi dove 
puoi modificare il nome, il tipo, l'inizio, la larghezza etc...e quindi 
salvi con nome la specifica di importazione che serve anche come specifica 
d'esportazione.
In pratica otterrai uno schema come quello posto da te inizialmente
cognome: occupa 35 caratteri alfanumerici; - Inizio 1 - Larghezza 35
nome: occupa 35 caratteri alfanumerici (da 36 a 70); - Inizio 36 - Larghezza 
35
luogo di nascita: occupa 35 caratteri alfanumerici (da 71 a 105); -  Inizio 
71 - Larghezza 35
data di nascita: occupa 10 caratteri alfanumerici (da 106 a 115); - Inizio 
106 - Larghezza 10
Paternità: occupa 24 caratteri alfanumerici (da 116 a 139); - Inizio 116 - 
Larghezza 24
Sesso: occupa 1 carattere alfanumerico (a 140) - Inizio 140 - Larghezza 1
Hai anche la possibilità di indicizzare un campo etc...alla fine potrai 
creare una nuona tabella all'interno della quale verranno formattati 
automaticamente i tuoi campi e vedrai i tuoi dati.
Buona Domenica
Gaspare


Un altro metodo semplice dato che si tratta di ESPORTARE
è di scrivere in un File Testo esportando delle Stringhe
a lunghezza Fissa
Ipotizziamo una Funzione di scrittura su File:
Public Function ExportFixed(sSQL as string, strFileName as string)
Dim strField         As String * 35
Dim strTiìot          As String
Dim rs                 As DAO.Recordset
Dim db                As DAO.Database
Dim fld                As DAO.Field
Dim Filenumber   As Integer
Set db=Currentdb
Set rs=db.OpenRecordset("SELECT Campo1, Campo2, Campo3 From NomeTabella")
If rs.Eof then exit Function
rs.movefirst
Filenumber = FreeFile
Open strFileName For Append As #Filenumber
    Do intil rs.Eof
        For each fld in rs.Fields
            strField=fld.Value
            strTot=strTot & strField
            strField=vbnulltring
        Next
        Print #Filenumber, strTot
        strTot=vbNullstring
        strField=vbnulltring
        rs.MoveNext
    Loop
Close #Filenumber
End Function
L'ho scritta molto a braccio e non considerando Spaziature variabili
ma potrebbe essere un buon punto di partenza.
Se poi hai la certezza che l'esportazione è sempe quella allora creati una
VarType personalizzata:
Public Type myExport
       Campo1    as string*35
       Campo2    As string*35
       Campo3    As String*52
       Campo4    As String*200
End Type
Quindi invece di ciclare la collection Fields leggi
direttamente i 4 campi , ti riporto parte del codice:
Dim mExp    as myExport
'...................
Do intil rs.Eof
        with mExp
            .Campo1=rs.Fields(0)
            .Campo2=rs.Fields(1)
            .Campo3=rs.Fields(2)
            .Campo4=rs.Fields(3)
            Print #Filenumber, .campo1 & .Campo2 & .Campo3 & .Campo4
         rs.MoveNext
 Loop
Vedi se può essere utile anche questo metodo.
