Cancellazione su file di testo
Hai un problema con Excel? 
Sempre su intervento su file t
di Enzo (utente non iscritto) data: 05/06/2009
Ciao ragazzi ho voluto aprire un altra discussione e vi spiego il mio quesito
l'istruzione qui sotto funziona perfettamente in quanto apre un file di testo posto nella colonna a di excel
analizza ogni singolo record e se questo inizia per 0 cancella la riga
la mia domanda e' questa
invece di cancellarla vorrei che questa sparisse ossia con l'istruzione attuale cancella il contenuto (so in partenza che ogni singolo record e' lungo 508)ma vorrei eliminarla
esiste un altro comando al posto di replace o posso integrare con qualche vostra idea
grazie per l'aiuto
For I = 2 To 3
direc = CurDir
Open Range("a" & I) For Input As #1
Open direc & "" & Range("K" & I) & ".txt" For Output As #2
Do Until EOF(1)
Line Input #1, DATA
record = Mid(DATA, 1, 1)
if record = 0 then
tutto= Mid(DATA, 1, 508)
DATA = Replace(DATA, tutto,"",,1)
Debug.Print DATA
Print #2, DATA
Loop
Close
Kill Range("A" & I)
Name direc & "" & Range("K" & I) & ".txt" As Range("A" & I)
Next I
|
di Enzo (utente non iscritto) data: 05/06/2009
Per "eliminarla intendo che non si vedano gli spazi vuoti
prima
888888888888888888888888888
111111111111111111111111111
000000000000000000000000000
222222222222222222222222222
con la mia istruzione
888888888888888888888888888
111111111111111111111111111
222222222222222222222222222
quello che vorrei
888888888888888888888888888
111111111111111111111111111
222222222222222222222222222 |
di Ricky53 data: 06/06/2009
Ciao enzo,
prova con questa modifica: in output vengono scritte le reghe solo se il primo carattere diverso da "0".
ciao da ricky53
For I = 2 To 3
direc = CurDir
Open Range("A" & I) For Input As #1
Open direc & "" & Range("K" & I) & ".txt" For Output As #2
Do Until EOF(1)
Line Input #1, DATA
If Mid(DATA, 1, 1) <> "0" Then
Print #2, DATA
End If
Loop
Close
Kill Range("A" & I)
Name direc & "" & Range("K" & I) & ".txt" As Range("A" & I)
Next I
|
di Enzo (utente non iscritto) data: 06/06/2009
Ciao ricky, devo riprendere una cosa che mi avevi detto tempo fa ossia
.......spiega meglio quello che vuoi fare e forse avrai una risposta
effettivamente come ti avevo descritto il problema la tua istruzione andrebbe benissimo ed io avevo fatto un semplice esempio per non andare nello specifico
il problema e' che le righe che io devo cancellare o non scrivere nel nuovo file iniziano per zero ma non deovono avere un campo zero piu' avanti
quindi non tutti i record che iniziano per zero devono essere cancellati
mi spiego meglio:
ogni record che inizia per zero ha nella posizione dalla 8 alla 12 dei numeri che possono essere anche tutti zeri
sono questi che non devono essere scritti
--------------------------------------
questo si
0000000001100000000
questo no
0000000000000000000
di Ricky53 data: 06/06/2009
Ciao enzo,
proprio così si deve sempre spiegare con chiarezza e tutto.
lo cosa è semplice: le condizioni sono due quindi va modificata la:
if mid(data, 1, 1) <> "0" then
con
if mid(data, 1, 1) <> "0" and ... la tua nuova condizione ... then
provaci
ciao da ricky53
di Enzo (utente non iscritto) data: 07/06/2009
Ci provo e ti faccio sapere
di Ricky53 data: 09/06/2009
Enzo:
fattoooo!!! (come diceva fiorello rifacendo il verso a giovanni muciaccia)
risoltooo!!!
ciao da ricky53
di Enzo (utente non iscritto) data: 09/06/2009
Si, scusa sono stato impegnato al lavoro
ho risolto filtrando i dati in qul modo
grazie di nuovo
ciao e alla prossima
p.s. se ti dovesse venire in mente (piu' che altro per altri lavori che ho in mente) come cancellare fisicamente un record se si verificano determinate condizioni fammelo sapere
come ti ho detto precedentemente alla eliminazione dei dati ci sono dei dati ma mi lasciava la riga vuota.
se hai una idea e' ben accetta
di Enzo (utente non iscritto) data: 09/06/2009
Ho riletto quello che ho scritto e ' nella fretta sembra di essermi espresso in maniera poco chiara.
volevo dire che ero arrivato alla cancellazione dei dati ma mi lasciava gli spazi vuoti
se invecei hai una idea per cancellarla fisicamente e' ben accetta
ciao
di Ricky53 data: 09/06/2009
Ciao enzo,
da quanto hai scritto prima e successivamente ricavo che non hai letto con attenzione
quanto ti ho suggerito:
la macro proposta non scrive (in output) il record che rientra nelle condizioni.
dovevi solo aggiungere la nuova condizione:
… ha nella posizione dalla 8 alla 12 dei numeri che possono essere anche tutti zeri ...
va bene lo faccio però questa soluzione si chiama "chiavi in mano" o in modo popolare "pappa pronta" e non mi trovi favorevole perchè non si impara nulla in questo modo.
prova.
ciao da ricky53
For I = 2 To 3
direc = CurDir
Open Range("A" & I) For Input As #1
Open direc & "" & Range("K" & I) & ".txt" For Output As #2
Do Until EOF(1)
Line Input #1, DATA
If Mid(DATA, 1, 1) <> "0" and Mid(DATA, 8, 5) <> "0" Then
Print #2, DATA
End If
Loop
Close
Kill Range("A" & I)
Name direc & "" & Range("K" & I) & ".txt" As Range("A" & I)
Next I
|
di Enzo (utente non iscritto) data: 09/06/2009
Ciao ricki forse non hai letto tu attentamente quello che ho scritto
il problema l'ho risolto in quel modo pero' e' come aggirare l'ostacolo
visto che nell'istruzione mia iniziale riesco ad individuare il record da cancellare e lo cancello ma lasciando degli spazi, ti avevo chiesto che se a tempo perso ti veniva un idea per cancellare fisicamente il record senza spazi me lo potevi comunicare
di Enzo (utente non iscritto) data: 09/06/2009
P.s. non mi e' mai piaciuta la pappa pronta
e per dimostrarti cio
e' da tempo che ho questa istruzione che mi elimina fisicamente il record da un file ma si esegue solo quando quando trova esattamente "texttofind" ma lo ricerca genericamente
devo cercare di adattarlo con degli if
bye
FPATH = "C:PROVA.TXT"
TEXTTOFIND = "00000"
Dim fHW As Integer
Dim fHR As Integer
Dim sf As String
On Error Resume Next
Kill FPATH & "_TMP"
Err.Clear
fHW = FreeFile
Open FPATH & "_TMP" For Output As #fHW
If Err = 0 Then
fHR = FreeFile
Open FPATH For Input As #fHR
If Err = 0 Then
Do While Not EOF(fHR)
Line Input #fHR, sf
Record = Mid(sf, 384, 20)
If InStr(sf, TEXTTOFIND) = 0 Then
Print #fHW, sf
End If
Loop
End If
End If
Close #fHR
Close #fHW
Kill FPATH
Name FPATH & "_TMP" As FPATH
|
di Ricky53 data: 09/06/2009
Ciao enzo,
la mia era solo una forma semi-spiritosa (che uso spesso) di scrivere, nulla di offensivo.
ti conosco da tanto tempo per non sapere come operi.
torniamo al pratico:
io ho capito questo
1. l'istruzione data = replace(data, tutto,"",,1)
ti crea una riga vuota che vuoi eliminare
2. con la macro che riporto tu non ottieni la scrittura in output (che chiami cancellazione) corretta
3. questa istruzione non funziona come vorresti: if instr(sf, texttofind) = 0 then che corrisponde a
scrivi se non trovi “00000” ma non gli dice da quale posizione è qui sta il problema
4. la mia proposta
if mid(data, 8, 5) <> "00000" then
print #2, data
end if
scrive (in output) solo se non trova “00000” a partire dalla posizione 8 (gli dice la posizione).
da qui in poi non ho capito se hai utilizzato la mia precedente istruzione (che comunque fa quello che chiedi) e non ti soddisfa.
spero di aver chiarito tutto.
ciao da ricky53
'macro che usa enzo
FPATH = "C:PROVA.TXT"
TEXTTOFIND = "00000"
Dim fHW As Integer
Dim fHR As Integer
Dim sf As String
On Error Resume Next
Kill FPATH & "_TMP"
Err.Clear
fHW = FreeFile
Open FPATH & "_TMP" For Output As #fHW
If Err = 0 Then
fHR = FreeFile
Open FPATH For Input As #fHR
If Err = 0 Then
Do While Not EOF(fHR)
Line Input #fHR, sf
Record = Mid(sf, 384, 20)
If InStr(sf, TEXTTOFIND) = 0 Then
Print #fHW, sf
End If
Loop
End If
End If
Close #fHR
Close #fHW
Kill FPATH
Name FPATH & "_TMP" As FPATH
|
di Ricky53 data: 09/06/2009
Ciao enzo,
prima non ho scritto che potevi sostituire, nella tua macro, l'istruzione:
if instr(sf, texttofind) = 0 then
con
if mid(sf, 8, 5) <> "00000" then
ci sono altre cose che non mi sono chiare nel tuo codice ma, non avendo l'intera macro, non posso darti nessun suggerimento altrimenti rischierei di fare danni invece di aiutarti ad ottimizzare il tuo codice.
ciao da ricky53
di Enzo (utente non iscritto) data: 10/06/2009
Ciao ricky, prima di tutto non mi sono offeso e quindi tutto ok
la tua istruzione precedente funziona benissimo
diciamo che questa "discussione" puo' essersi conclusa.
la mia domanda era solamente posta per eventualmente risolvere la cancellazione fisica di un record da un file txt ma abbiamo risolto, anzni hai risolto in maniera brillante il quesito.
ciao ed alla prossima
di Ricky53 (utente non iscritto) data: 10/06/2009
Ciao enzo,
benissimo.
buon proseguimento ed alla prossima.
ciao da ricky53
Vuoi Approfondire?