Importazione dati di lunghezza fissa senza delimitatore

Come utilizzare i campi. Differenze tra campi calcolati, testo, numero, multipli, contenitori.

Moderatore: Moderatori

book
Messaggi: 703
Iscritto il: lunedì 5 gennaio 2004, 1:00

Messaggio da book » lunedì 6 novembre 2006, 8:03

Se invece trovo dei duplicati, li ordino in ordine decrescente di data di creazione. Mi posiziono sul primo record del gruppo trovati, quindi ometto la prima metà dei record trovati e cancello tutti gli altri (che sono l'altra metà). In questo modo prendo due piccioni con una fava: tenendo quelli nuovi, sono sicuro che il testo è il più aggiornato (caso 3b) e contemporaneamente elimino i duplicati identici (caso 3a).
sei sicuro di avere i risultati sperati e corretti con questo metodo?
ad intuito (ma solo ad intuito in quanto non ho provato) ho qualche dubbio.

Ciao
Riccardo

Thomas
Messaggi: 162
Iscritto il: sabato 18 marzo 2006, 1:00
Versione FileMaker: 16
Sistema operativo: Mac OS X 12 Sierra

Messaggio da Thomas » sabato 11 novembre 2006, 21:03

Cari forumisti,
Eccomi di ritorno dopo una settimana allucinante ... 8O
raybaudi ha scritto:Sarei comunque curioso di sapere se le cinque righe di script che ti ho proposto sono ALMENO altrettanto performanti...non necessiterebbe di alcuna ricerca di duplicati ed i record con uguale ID, ma testo differente, verrebbero automaticamente aggiornati.

Dalle prove che ho fatto (con file di testo non enormi) il risultato è IMMEDIATO.
Mi spiace deluderti, ma la tua proposta non è particolarmente performante.
Se guardiamo la tua proposta

Codice: Seleziona tutto

Importa record [Senza finestra;"origine.txt";Aggiungi;Windows ANSI] 
Importa record [Senza finestra;"RT01.fp7";Aggiorna corrispondente;Windows ANSI] 
Vai al formato ["Appoggio"(Appoggio)] 
Elimina tutti i record [Senza finestra] 
Vai al formato ["Master"(Master)]
osserviamo che vi sono tre operazioni importanti (2 x importa record e 1 x elimina tutti i record) dal punto di vista dell'utilizzo della CPU. Con il mio metodo, di principio ce n'è uno solo (importa record). Il controllo dei duplicati, essendo indicizzato, è velocissimo, in particolare quando non ce ne sono; in questi casi cade anche la necessità di cancellare qualcosa.
book ha scritto:sei sicuro di avere i risultati sperati e corretti con questo metodo?
ad intuito (ma solo ad intuito in quanto non ho provato) ho qualche dubbio.
Non nascondo che all'inizio, dopo aver individuato questa possibilità, ho avuto anch'io qualche dubbio. Ragionandoci sopra, mi sono reso conto che i passi sono di una rigorosità matematica stringente, per cui sicuri. Guardiamo i passi proposti al rallentatore:
1) Creazione automatica di data e ora. Questa operazione non può essere influenzata da nessuno, per cui i record importati avranno un'etichetta indelebile con la data e l'ora in cui sono stati creati.
2) Ricerca dei duplicati (ID = "!"). Il gruppo dei trovati sarà sempre costituito di un numero pari di record (per ogni duplicato vengono considerati entrambi i record duplicati).
3) Ordina per data e ora decrescente. Questa operazione fa sì che i record più nuovi dei duplicati saranno nella prima metà del gruppo trovati. Le copie più vecchie (lo stesso numero, visto che il gruppo trovati è di numero pari) saranno nella seconda metà del gruppo trovati.
4) Vai al primo record del gruppo trovati (indispensabile, visto che dopo aver ordinato i record, quello attuale può trovarsi ovunque nella serie)
5) Ometti [get(ContoTrovati)/2] record. La prima metà dei record (i più nuovi) esce dal gruppo trovati; rimangono solo i record più vecchi.
6) Elimina tutti i record. Vengono eliminati tutti i record del gruppo trovati, quindi i record più vecchi. Tutti gli altri record, quindi quelli non duplicati e quelli duplicati più nuovi restano.

Grazie anche a questa spiegazione, mi sono convinto che la soluzione è corretta. Un problema residuo potrebbe risiedere in un ambiente di rete (come il mio) in cui più utenti contemporaneamente (ma non è il mio caso) importano dati. In questo caso potrebbero esserci dei conflitti che potrebbero essere evitati, impedendo che lo script di importazione venga utilizzato da più utenti contemporaneamente.

Cari saluti
Thomas
FM 11.0v2 adv - MacOS X 10.6.4

book
Messaggi: 703
Iscritto il: lunedì 5 gennaio 2004, 1:00

Messaggio da book » domenica 12 novembre 2006, 9:18

ciao Thomas,
il tuo script è perfetto tranne che per una piccola eventualità di cui dovrai tenere a mente ed evitare che la condizione accada.

I record da importare "devono" avere tutti ID diversi...

...perchè nell'eventualità che importi 2 (o X) record con ID identici ti ritroverai nel file master 3 (oppure 1+X) record con lo stesso ID.
e questa eventualità ti fa saltare la "rigorosità matematica"...

Riccardo

Thomas
Messaggi: 162
Iscritto il: sabato 18 marzo 2006, 1:00
Versione FileMaker: 16
Sistema operativo: Mac OS X 12 Sierra

Messaggio da Thomas » domenica 12 novembre 2006, 10:17

book ha scritto:I record da importare "devono" avere tutti ID diversi...
...perchè nell'eventualità che importi 2 (o X) record con ID identici ti ritroverai nel file master 3 (oppure 1+X) record con lo stesso ID.
e questa eventualità ti fa saltare la "rigorosità matematica"..
Acc... hai perfettamente ragione!

Per fortuna che la soluzione è semplice: al momento dell'importazione, quando il gruppo trovati si compone dei record appena importati, faccio una ricerca dei duplicati con "limita gruppo trovato" per controllare la bontà del file appena importato. Visto che è un caso rarissimo, se questo controllo preliminare è OK, continuo lo script con la ricerca dei duplicati come descritto precedentemente, in caso contrario cancello gli importati, segnalo l'errore all'utente e interrompo lo script. Se un giorno questa eventualità dovesse accadere, verrò avvisato e troverò una soluzione in quel momento...

Per essere sicuri della rigorosità matematica dovrò pure controllare l'unicità degli ID già presenti nel database prima dell'importazione, perché se nel database esistono già dei record con il medeimo ID, il problema sarà lo stesso...

Grazie mille e buona domenica.
Thomas
FM 11.0v2 adv - MacOS X 10.6.4

Rispondi