Nokioteca [Nokia] Forum: [problema]eliminare Riga Da File Di Testo - Nokioteca [Nokia] Forum

Salta al contenuto

Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

[problema]eliminare Riga Da File Di Testo

#1 L   Ra_ 

  • Advanced Member
  • PuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 181
  • Iscritto: 24 agosto 2006
  • Cellulare:N73

Inviato 27 febbraio 2010 - 17:30

salve a tutti...è da tanto che non posto...

andiamo subito al dunque(sempre che qualcuno può aiutarmi!)...cercherò di essere più chiaro possibile...

ho un file di testo con n righe, devo cancellare una riga...non so se esiste una funzione che permette di cancellarmi le righe, ma per adesso pensavo di utilizzare la funzione split determinando tutte le righe e successivamente rimuovo con array.remove la riga interessata. Dopo ricreo il file e metto tutti gli elementi dell'array senza quello che si è cancellato...ma non funziona! :thumbdown: :)

posto qualche pezzo di codice sempre se qualcuno ha voglia di aiutarmi :D
		f=io.open("E:\\OCM\\"+giorno(2)+".txt");
		r=io.read(f,io.size(f));
		dividi=split(r, "\n");
		pointer=3;	   
		array.remove(dividi, pointer);
		/*
		io.create("E:\\OCM\\file.txt", io.utf8);
		txt=io.append("E:\\OCM\\file.txt");
		for a=0 to len(dividi)-2 do //esiste un'array vuoto (per questo è meno2)
			io.write(txt, dividi[a]);
			io.write(txt, "\n");
		end;
		*/

Messaggio modificato da Ra_ il 27 febbraio 2010 - 17:30

0

#2 L   lento 

  • Senior Member
  • PuntoPuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 637
  • Iscritto: 03 settembre 2008
  • Cellulare:E72

Inviato 28 febbraio 2010 - 00:16

Visualizza MessaggiRa_, il 27/02/2010 - 17:30, ha scritto:

		f=io.open("E:\\OCM\\"+giorno(2)+".txt");
		r=io.read(f,io.size(f));
		dividi=split(r, "\n");
		pointer=3;	   
		array.remove(dividi, pointer);
		/*
		io.create("E:\\OCM\\file.txt", io.utf8);
		txt=io.append("E:\\OCM\\file.txt");
		for a=0 to len(dividi)-2 do //esiste un'array vuoto (per questo è meno2)
			io.write(txt, dividi[a]);
			io.write(txt, "\n");
		end;
		*/

'Ra_' non ho capito bene il problema ne hai indicato l'errore che ti genera...vado a naso per quel che ricordo:
array.remove(dividi, pointer); questa funzione accorcia l'array di un valore
perciò perchè qui fai -2 ? len(dividi)-2
Non capisco anche perchè apri due volte lo stesso file con io.create() e poi con io.append()
Domanda: come mai usi un array al posto di aprire un file in lettura e uno nuovo in scrittura e riportare tutte le righe tranne quella da eliminare?.
Se ho sparato cavolate perdonami...con mShell stò andando un pò alla deriva...
0

#3 L   Ra_ 

  • Advanced Member
  • PuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 181
  • Iscritto: 24 agosto 2006
  • Cellulare:N73

Inviato 28 febbraio 2010 - 00:49

Visualizza Messaggilento, il 28/02/2010 - 00:16, ha scritto:

'Ra_' non ho capito bene il problema ne hai indicato l'errore che ti genera...vado a naso per quel che ricordo:
array.remove(dividi, pointer); questa funzione accorcia l'array di un valore
perciò perchè qui fai -2 ? len(dividi)-2
Non capisco anche perchè apri due volte lo stesso file con io.create() e poi con io.append()
Domanda: come mai usi un array al posto di aprire un file in lettura e uno nuovo in scrittura e riportare tutte le righe tranne quella da eliminare?.
Se ho sparato cavolate perdonami...con mShell stò andando un pò alla deriva...

ciao lento...grazie per aver risposto...cominciamo!
allora...la mia idea era quella di splittare tutte le righe del documento txt(e quindi genero così un array) ed eliminare la riga corrispondente dall'array, per rigenerare il file di testo...

adesso:
ho messo len-2 e non len-1 perchè l'ultimo array è vuoto e non ha senso di esistere!
utilizzo io.create per far fuori il vecchio txt (ma non so se si fa così...) e io.append per riscrivere il testo dentro al file di testo...

Quote

Domanda: come mai usi un array al posto di aprire un file in lettura e uno nuovo in scrittura e riportare tutte le righe tranne quella da eliminare?

mi posti un codice d'esempio? :thumbs:

Messaggio modificato da Ra_ il 28 febbraio 2010 - 00:50

0

#4 L   lento 

  • Senior Member
  • PuntoPuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 637
  • Iscritto: 03 settembre 2008
  • Cellulare:E72

Inviato 28 febbraio 2010 - 11:29

Visualizza MessaggiRa_, il 28/02/2010 - 00:49, ha scritto:

mi posti un codice d'esempio? ;)

// eliminare righe 2010/02/28 Ore 10.45
use io, files;

f=io.open("E:\\Documents\\testo.txt");
nf=io.create("E:\\Documents\\f$$$.txt");
noriga=2; // linea da non trascrivere
co=0; // contatore
do
	linea=io.readln(f);
	if linea="" then io.close(f); break; end;
	if co=noriga then "fa nulla" else  io.write(nf,linea+"\n"); end;
	co=co+1;
until false;
io.close(nf);

files.delete("E:\\Documents\\testo.txt");
files.rename("E:\\Documents\\f$$$.txt","E:\\Documents\\testo.txt");

E' un pochino più lenta nello scrivere di come volevi far tu.
Ma di sicuro funziona sempre.
Ho aggiunto anche la cancellazione e la rinomina dei files (Credo che il tuo scopo sia di avere lo stesso file ma senza una riga..giusto?).

Per via dello dividi=split(r, "\n"); effettivamente splitta anche i caratteri di terminazione file....per farlo funzionare come tu vuoi bisognerebbe vedere come aprire il files probabilmente va indicato qualcosa come io.utf8 anche in apertura...qui non posso aiutarti, ora sono un pythoniano :lol:
0

#5 L   Ra_ 

  • Advanced Member
  • PuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 181
  • Iscritto: 24 agosto 2006
  • Cellulare:N73

Inviato 28 febbraio 2010 - 23:35

Visualizza Messaggilento, il 28/02/2010 - 11:29, ha scritto:

// eliminare righe 2010/02/28 Ore 10.45
use io, files;

f=io.open("E:\\Documents\\testo.txt");
nf=io.create("E:\\Documents\\f$$$.txt");
noriga=2; // linea da non trascrivere
co=0; // contatore
do
	linea=io.readln(f);
	if linea="" then io.close(f); break; end;
	if co=noriga then "fa nulla" else  io.write(nf,linea+"\n"); end;
	co=co+1;
until false;
io.close(nf);

files.delete("E:\\Documents\\testo.txt");
files.rename("E:\\Documents\\f$$$.txt","E:\\Documents\\testo.txt");

E' un pochino più lenta nello scrivere di come volevi far tu.
Ma di sicuro funziona sempre.
Ho aggiunto anche la cancellazione e la rinomina dei files (Credo che il tuo scopo sia di avere lo stesso file ma senza una riga..giusto?).

Per via dello dividi=split(r, "\n"); effettivamente splitta anche i caratteri di terminazione file....per farlo funzionare come tu vuoi bisognerebbe vedere come aprire il files probabilmente va indicato qualcosa come io.utf8 anche in apertura...qui non posso aiutarti, ora sono un pythoniano :rolleyes:


grazie...proverò il codice quando avrò tempo e ti farò sapere...passerò forse anch'io a python in futuro(penso ne valga la pena rispetto ad mshell)!
0

#6 L   Ra_ 

  • Advanced Member
  • PuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 181
  • Iscritto: 24 agosto 2006
  • Cellulare:N73

Inviato 03 marzo 2010 - 13:32

ho provato lo script velocemente, mi crea un file di testo con le righe, ma poi è pieno di "null"...dopo proverò a sistemare il codice...
0

#7 L   lento 

  • Senior Member
  • PuntoPuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 637
  • Iscritto: 03 settembre 2008
  • Cellulare:E72

Inviato 03 marzo 2010 - 16:05

Visualizza MessaggiRa_, il 03/03/2010 - 13:32, ha scritto:

ho provato lo script velocemente, mi crea un file di testo con le righe, ma poi è pieno di "null"...dopo proverò a sistemare il codice...

Ho testato personalmente quanto ti ho riportato e funziona. Ho utilizzato un file testuale con \n come terminatore di linea.
Hai risistemato dove andare a pescare i tuoi files. f=io.open("E:\\OCM\\"+giorno(2)+".txt"); e io.create("E:\\OCM\\file.txt", io.utf8); ?
Li ho modificati proprio per testarlo.....
0

#8 L   Ra_ 

  • Advanced Member
  • PuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 181
  • Iscritto: 24 agosto 2006
  • Cellulare:N73

Inviato 03 marzo 2010 - 16:56

Visualizza Messaggilento, il 03/03/2010 - 16:05, ha scritto:

Ho testato personalmente quanto ti ho riportato e funziona. Ho utilizzato un file testuale con \n come terminatore di linea.
Hai risistemato dove andare a pescare i tuoi files. f=io.open("E:\\OCM\\"+giorno(2)+".txt"); e io.create("E:\\OCM\\file.txt", io.utf8); ?
Li ho modificati proprio per testarlo.....


sisi erano già stati modificati...

EDIT: il problema è legato al fatto che non mi elimina il file, ma mi dice che è in uso..ricontrollo il codice e chiudo gli eventuali stream aperti

Messaggio modificato da Ra_ il 03 marzo 2010 - 17:28

0

Condividi questa discussione:


Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione