Newsgroup: it.comp.lang.visual-basic
Titolo: Problema ad unire files...

ho tre file di 1,5 Mb circa... li devo unire in un unico file finale... Una
ca__ata... pensavo... e invece ottengo un file finale di circa 600k...
Perchč??? Dove sbaglio? Per unirli faccio +o- cosě:
open filedest for output as #1
open fileorigine1 for input as #2
do while not eof(2)
line input #2, riga
print #1, riga
loop
close #2open
fileorigine2 for input as #2
do while not eof(2)
line input #2, riga
print #1, riga
loop
close #2
open fileorigine3 for input as #2
do while not eof(2)
line input #2, riga
print #1, riga
loop
close #2
close #1
e lui non va... ? ? ? ? ?  :-/  Heeeeeelp!!!
DSMk
P.S. Il codice riportato l'ho scritto adesso, ma dovrebbe essere lo stesso
che ho usato...

 do while not eof(2)
Il problema è probabilmente originato dal fatto che si tratta di files
binari, che al loro interno contenono un carattere di Eof (Control Z).
Non appena il tuo ciclo incontra in lettura quel carattere, pensa che il
file sia teminato anche se così non è.
Per ovviare il problema dovresti aprire il file in modo binario. Puoi usare
la funzione LOF() per avere la lunghezza del file che hai aperto, leggerlo
tutto in una unica variabile con il Get e scriverlo in una unica soluzione
con il PUT.
Dai una occhiata all'help per le istruzioni Open (modalità binary), LOF, GET
e PUT e vedrai che ne esci in breve con una routine funzionante.
Ciao
*Roby*
P.S.
Non è bello usare come numeri di file dei valori costanti. l'Handle del file
2 per esempio potrebbe già essere in uso da un'altra parte del programma.
Molto meglio chiedere al sistema operativo di avere un handle valido, usando
la funzione FreeFile come nell'esempio seguente:
Dim HandleFile1 as Long
HandleFile1=freefile
Open "Nomefile" for input as #HandleFile1
Close HandleFile1

 P.S. Il codice riportato l'ho scritto adesso, ma dovrebbe
essere lo stesso che ho usato...
*Un* modo di operare potrebbe essere questo:
Option Explicit
Sub Main()
  Dim intDst           As Integer
  Dim intSrc           As Integer
  Dim strFiles(0 To 3) As String
  Dim intIndex         As Integer
  Dim strBuffer        As String
  Let strFiles(0) = "123."
  Let strFiles(1) = "1."
  Let strFiles(2) = "2."
  Let strFiles(3) = "3."
  Call ChDir("c:\windows\desktop")
  Let intDst = FreeFile(0)
  Open strFiles(0) For Binary Access Write As #intDst
  Seek #intDst, LOF(intDst) + 1
  For intIndex = 1 To UBound(strFiles)
    Let intSrc = FreeFile(0)
    Open strFiles(intIndex) For Binary Access Read As #intSrc
    Let strBuffer = Space$(LOF(intSrc))
    Get #intSrc, , strBuffer
    Put #intDst, , strBuffer
    Close #intSrc
  Next
  Close
End Sub
--
Ciao.
Maurizio
--------
?SPQR(C)
 X

Dopo dieci minuit di temtativi ( ;-) ) ci sono finalmente riuscito!!! Grazie
1000... Ciao...
DSMk

 Dopo dieci minuit di temtativi ( ;-) ) ci sono finalmente riuscito!!!
Se aspettavi altri 10 minuti e ti collegavi al Newsgroup, trovavi la
risposta di Maurizio che ti aveva scritto una routine funzionante bell'e
pronta. 8-)
Vabbè consolati, facendo si impara di + che copiando.
Ciao
*Roby*

 Vabbè consolati, facendo si impara di + che copiando.
Quache decina di giorni fa si era aperto un dibattito
sull'argomento ma si era anche presto spento. Forse hanno
influito anche le ferie. Fatto sta che si erano delineate
alcune posizioni vicine al concetto che esprimi tu adesso. Io
pero` non sono tanto convinto che le cose stiano cosi`.
Quantomeno e` errato parlare di "copiare" in questo caso. Il
termine, infatti, e` tendenzioso... Cosa ne pensi?


 termine, infatti, e` tendenzioso... Cosa ne pensi?
Che dipende da chi "copia".
Di solito quando la risposta contiene del codice la persona che lo scrive si
picca di ottimizzarlo almeno un po', e di scriverlo in modo decente. Questo
è almeno quello che faccio io, e vedendo il tuo esempio direi che anche tu
ti comporti così (non è una critica, fa piacere vedere del codice scritto
bene).
Può però darsi che il destinatario del messaggio trovi la routine troppo
difficile da capire, e preferisca cercare di utilizzarla così com'è. Nel
contempo può anche essere che, proprio perchè il codice che riceve è scritto
bene, si impegni a capirlo e impari qualche cosa.
Personalmente faccio più fatica ad imparare le cose se me le spiegano senza
darmi esempi, ma se le capisco da solo le ricordo + a lungo. Ovvio è che non
disdegno mai un sorgente, anzi.
Era solo per esemplificare.
Ciao
*Roby*
P.S.
Ma alla fine capire non è così importante. Il fatto stesso di non dover
riscrivere routine già scritte da altri diminuisce il dispendio totale di
energie, e anche questo è positivo.
Alla faccia dell'entropia.

Già, se uno copia e incolla direttamente il codice fornito da qualche anima
pia (magari anche con la spiegazione passo per passo per integrarlo nel
progetto) senza nemmeno scorrerlo velocemente e poi si assembla subito il
suo programma, sarà tutto contento di avere il suo bell'eseguibile
funzionante di cui lui ha fatto solo una finestra in cui ha messo una sua
foto ed ha scritto "Guarda come sono stato bravo a fare questo programma",
ma non avrà imparato niente ( "KNOWLEDGE IS POWER, PUSSY IS  LUCK", Master -
Hacker ) e probabilmente si troverà due mesi dopo a postare una richiesta di
aiuto identica... Fortunatamente non faccio parte di questa categoria ;-)...
Ne approfitto ancora per ringraziare quelli che mi hanno risposto... Devo
ammettere che non avevo mai usato gli statement get e put... e pensare che
smanetto in basic + o - da quando un 386 era chiamato "Pc multimediale"...
Ancora grazie 1000... Ciao...
DSMk

 Alla faccia dell'entropia.
Mi dispiace che hai perso il thread di cui ti parlavo e mi
dispiace anche di non essere riuscito ad agganciarmi ad esso
prima che morisse. I partecipanti avevano fatto alcune
considerazioni che mi sarebbe piaciuto commentare ma anch'io
per mancanza di tempo non ho potuto contribuire.
In sintesi, erano emerse due posizioni riguardo le risposte
che si postano al ng. Chi diceva che era preferibile non
scrivere codice ma fornire indicazioni discorsive e chi
sosteneva piu` o meno il contrario.
Ora non vorrei dilungarmi ma mi farebbe piacere se, quando
saremo nuovamente tutti presenti, si riaprisse il dibattito.
La mia non e` solo voglia di "polemizzare" (in senso lato ed
ampio) quanto piuttosto il desiderio di riflettere su cio` che
facciamo quando scriviamo, per domandare o per rispondere.
Potrebbe aiutare sia gli uni che gli altri e rendere piu`
efficace la comunicazione.


 saremo nuovamente tutti presenti, si riaprisse il dibattito.
Se il lavoro non mi rifagocita, sono pronto.
Ciao
*Roby*


Per quanto mi riguarda capire non e' solo importante, e' fondamentale.
Per me far programmi non e' solo il lavoro che mi da da mangiare dal
1976, ma e' anche un hobby da quando ho potuto permettermi di
acquistare un computer tutto mio (1983).   Tutto quello che so fare
oggi lo devo all'impegno che ho sempre avuto nel capire cio' che mi
veniva insegnato o che imparavo guardando altri sorgenti o cio' che ho
conquistato con lunghe prove e studio di documentazione.
E anche le routines "pronte per l'uso" le ho sempre smontate, capite e
rimontate a modo mio.     E quando ne ho avuto il tempo e l'occasione
ho anche rifatto cio' che normalmente si trovava disponibile in giro...
se non altro perche', se qualcosa non funzionava a dovere, ho sempre
saputo (e potuto) metterci le mani sopra senza dovermi trincerare
dietro la dubbia scusa "e' un prodotto di terze parti, se ha dei bug non
e' colpa mia"...
Ciao
--
Frogman
indirizzo e-mail corretto: 
be...@reboot.to