Come posso creare una funzione che mi elimina le prime righe di un file di testo?
In pratica ho letto di una soluzione col ciclo, non c'è una soluzione più veloce invece di ciclare tutto il file che contiene migliaia di righi?
Come posso creare una funzione che mi elimina le prime righe di un file di testo?
In pratica ho letto di una soluzione col ciclo, non c'è una soluzione più veloce invece di ciclare tutto il file che contiene migliaia di righi?
Puoi leggere con il metodo
ReadAllText
http://msdn.microsoft.com/it-it/libr...v=vs.110).aspx
eliminare la parte di array che non ti serve e riscrivere, ma devi valutare l'impegno della memoria.
Altrimenti un ciclo non penso sia particolarmente oneroso.
P.S. Se le righe sono a "lunghezza fissa" ovviamente la cosa cambia.
No MP tecnici (non rispondo nemmeno!), usa il forum.
Il PC sul quale dovrò utilizzare questo soft ha 1GB di Ram ed è già quasi sempre piena
Il file in questione ha quasi sempre dalle 1000 alle 5000 righe ed è txt
Non sono di lunghezza fissa le righe
Considerando ciò qual è il metodo consigliato?
UPDATE:
Ho provato con "io.file.readallaline()" e funziona ora però non so se è il metodo giusto che può funzionare VELOCEMENTE su PC poco preformanti analizzando file di molte righe
Il progetto è grossomodo:
È il metodo giusto oppure è tutto da rifare? in caso, cosa dovrei modificare?codice:Dim lines() As String = File.ReadAllLines("C:\File.txt") Dim newlines(lines.Length - 1 - CInt(TextBox1.Text)) As String For x = 0 To lines.Length - 1 - CInt(TextBox1.Text) Step 1 newlines(x) = lines(CInt(TextBox1.Text) + CInt(x)) Next x File.WriteAllLines("C:\FileNuovo.txt", newlines) 'Si ho fatto una prova veloce se è questo il metodo corretto mi metto un dim riga as integer = cint(textbox1.text) invece di dover mettere sempre la conversione in intero del testo presente nella textbox
Edit: Ovviamente LINES contiene le righe del file originale/vecchio, NEWLINES contiene le righe del file modificato/nuovo.
Direi di usare i metodi di Array evitando array duplicati e cicli for
codice:Dim lines()AsString=File.ReadAllLines("C:\File.txt") Dim lAll = lines.Length - 1 Dim lFrom As Integer = Convert.ToInt32(TextBox1.Text) Array.Copy(lines, lFrom, lines, 0, lAll - lFrom) Array.Resize(lines, lAll - lFrom) File.WriteAllLines("C:\FileNuovo.txt", lines)
No MP tecnici (non rispondo nemmeno!), usa il forum.
Dai una occhiata a Array.Copy:
http://msdn.microsoft.com/it-it/libr...v=vs.110).aspx
Un altro metodo potrebbe essere leggere tutto il file come unica stringa e poi con un Loop cercare con IndexOf la posizione del "VbCrLf" (carattere di fine riga) voluto e creare relativa Substring.
Il metodo giusto è forse quello che impiega meno tempo:
Dim T as DateTime = Now (prima del codice)
Debug.Print (Now - T).TotalMilliseconds a fine codice
Ho già imparato 10 cose nuove... faccio qualche prova Grazie...
UPDATE:
Il codice di @Oreon, l'ho studiato oltre a copiarlo ed incollarlo ma, non capisco perché nel nuovo file non mi copia l'ultimo rigo.
Riguardo @eziogsv, credo che sia pochino più complesso e probabilmente anche meno performante.
Tralasciando il fatto che muovendosi in una stringa è più complicato individuare le RIGHE, cosa che su un array già hai ben definita.
RE - EDIT:
Togliendo il - 1 dalla seconda riga sembra funzionare:
Dim lAll = lines.Length - 1
Ho provato con un file di 10 righe e "lines.length" mi restituisce effettivamente "10"
Ultima modifica di deamon75; 23-07-2014 a 22:28 Motivo: Update
Mi fai scaricare il file dati con cui hai provato?
Oregon
No MP tecnici (non rispondo nemmeno!), usa il forum.
Abbi pietà di me, sono andato a memoria ed ho sbagliato
Ad ogni modo per la prova è semplice, io ho creato un file di testo ed ho scritto:
1blabla
2blabla
3blabla
4blabla
5blabla
6blabla
7blabla
8blabla
9blabla
0blabla
Poi l'ho salvato in questa maniera durante le prove il tutto è più veloce posso facilmente capire le righe che mi ha copiato o eliminato
Ad ogni modo togliendo il -1 ho fatto una decina di prove con file grandi e piccoli e sembra funzioni alla perfezione, sia la mia funzione sia la tua.
OT: Che differenza c'è tra il CInt() ed il Convert.ToInt32() io di solito per le conversioni utilizzo il primo cioè CInt, CStr, etc.. c'è differenza?