Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [Vb.Net] Vorrei fare un programma che mi elimina le prime N di righe da un file di testo

    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?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quote Originariamente inviata da deamon75 Visualizza il messaggio
    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.

  3. #3
    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?

  4. #4
    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:
    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
    È il metodo giusto oppure è tutto da rifare? in caso, cosa dovrei modificare?

    Edit: Ovviamente LINES contiene le righe del file originale/vecchio, NEWLINES contiene le righe del file modificato/nuovo.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    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.

  6. #6
    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

  7. #7
    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

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Mi fai scaricare il file dati con cui hai provato?

    Oregon
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    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?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.