Scrivere file di testo senza riga finale vuota

di il
10 risposte

Scrivere file di testo senza riga finale vuota

Sale ho bisogno di copiare dei dati da un file di testo ad un altro e una ma mi accorgo che con streamwriter mi aggiunge una linea vuota alla fine del file, ovvero un ritorno a capo. Ho provato anche con altri comandi ma e con trimend del ritorno a capo ma non scompare .

Qualcuno ha un esempio di codice o il suggerimento su un comando da usare  per scrivere un output senza linea finale?

Grazie

10 Risposte

  • Re: Scrivere file di testo senza riga finale vuota

    Un file "di testo" termina sempre con una coppia di caratteri Chr(13) Chr(10). Anche il file di input, se veramente è semplice "testo", dovrebbe essere così. Se invece  è un'altra cosa dovresti trattare questi dati come array di byte. Questo è uno spunto da approfondire:

    Dim bytes As Byte() = System.Text.Encoding.Default.GetBytes(<string>)
    ...
    File.WriteAllBytes(<nomefile>, bytes)
  • Re: Scrivere file di testo senza riga finale vuota

    Quasi sicuramente non hai una linea vuota a fine file ma è quello che vedi con un editor se apri il file.

    Ogni linea di testo ha il suo CRLF e se è così non esiste linea vuota finale.

    Mostra il codice che usi per scrivere il file di testo e se vuoi allega il file di testo in questione per controllarlo.

  • Re: Scrivere file di testo senza riga finale vuota

    02/02/2025 - ribelle ha scritto:

    Sale ho bisogno di copiare dei dati da un file di testo ad un altro e una ma mi accorgo che con streamwriter mi aggiunge una linea vuota alla fine del file, ovvero un ritorno a capo. Ho provato anche con altri comandi ma e con trimend del ritorno a capo ma non scompare .

    Qualcuno ha un esempio di codice o il suggerimento su un comando da usare  per scrivere un output senza linea finale?

    Grazie

    Ciao, quando usi il 

    Using writer As New StreamWriter

    se usi 

    writer.WriteLine

    per le righe da copiare, il metodo aggiunge la riga con il ritorno a capo

    Per evitare di chiudere il file con il ritorno a capo dovresti usare il metodo:

    writer.Write

    che copierà l'ultima riga senza il ritorno a capo.

    Riepilogando dovresti fare :

    Using writer As New StreamWriter
    
    writer.WriteLine	' copia tutte le righe con il metodo che aggiunge il ritornoa a capo automaticamente
    
    writer.Write		' quando si arriva all'ultima riga da copiare, allora usa il metodo che non riporta in automatico il rirono a capo

    Vedere : https://learn.microsoft.com/it-it/dotnet/api/system.io.streamwriter?view=net-9.0

    Esempio:

            ' read all lines
            Dim lines As String() = File.ReadAllLines("C:\temp\CopyYuorFile.txt")
            ' create new file
            Using writer As New StreamWriter("C:\temp\NewCopiedFile.txt", False)
                ' check lines and  write
                For i As Integer = 0 To lines.Length - 1
                    If i < lines.Length - 1 Then
                        writer.WriteLine(lines(i))  ' write lines with CRLF
                    Else
                        writer.Write(lines(i))      ' write line without CRLF
                    End If
                Next
            End Using
    

    Ma si possono usare anche altri metodi.

  • Re: Scrivere file di testo senza riga finale vuota

    Franco, in questo modo il file sarebbe malformato.

    Ogni linea deve avere il CRLF alla fine e aggiungerlo all'ultima linea non significa avere una linea vuota alla fine. È solo quello che visualizza un editor e sembra ad un utente poco esperto.

     P.S. ti invito ancora a non quotare i post integralmente.. è estremamente fastidioso per la lettura ed assolutamente inutile

  • Re: Scrivere file di testo senza riga finale vuota

    Grazie mille appena a casa faccio delle prove, grazie mille ancora a tutti

  • Re: Scrivere file di testo senza riga finale vuota

    Appena puoi mostra il codice che usi e fidati, non hai linee vuote alla fine se non le aggiungi tu.

  • Re: Scrivere file di testo senza riga finale vuota

    03/02/2025 - oregon ha scritto:

    Franco, in questo modo il file sarebbe malformato.

    Ok, ma mi sono basato sulla richiesta specifica di non avere un ritorno a capo alla fine del file come da richiesta:

    02/02/2025 - ribelle ha scritto:

    mi accorgo che con streamwriter mi aggiunge una linea vuota alla fine del file, ovvero un ritorno a capo.

    Poniamo di avere un file da copiare di questo tipo :

    che ha i suoi fine linea che possono essere mostrati in questo modo:  

    Con il seguente metodo, cioè con il WriteLine:

            ' read all lines
            Dim lines As String() = File.ReadAllLines("C:\temp\CopyYuorFile.txt")
            ' create new file
            Using writer As New StreamWriter("C:\temp\NewCopiedFile.txt", False)
                ' check lines and  write
                For i As Integer = 0 To lines.Length - 1
                    writer.WriteLine(lines(i))  ' write lines with CRLF
                Next
            End Using

    Si ottiene un file come questo:

    Dove l'ultimo record ha il ritorno a capo e ovviamente mostra una nuova linea (la riga 10)

    -----

    Se a questa situazione si richiede di rimuovere l'ultimo ritorno a capo, allora si potrebbe procedere come in precedenza accennato:

     		' read all lines
            Dim lines As String() = File.ReadAllLines("C:\temp\CopyYuorFile.txt")
            ' create new file
            Using writer As New StreamWriter("C:\temp\NewCopiedFile.txt", False)
                ' check lines and  write
                For i As Integer = 0 To lines.Length - 1
                    If i < lines.Length - 1 Then
                        writer.WriteLine(lines(i))  ' write lines with CRLF
                    Else
                        writer.Write(lines(i))      ' write line without CRLF
                    End If
                Next
            End Using

    In questo caso si ottiene un file di questo tipo senza l'ultimo fine linea:

    che, in questo specifico esempio, corrisponde esattamente al file di origine da copiare come mostrato all'inizio di questo post:

    ...

    Quanto riportato in questi esempi risponde al quesito posto dall'utente; "mi aggiunge una linea vuota alla fine del file, ovvero un ritorno a capo."
    e dimostra semplicemente come si comportano i due metodi di scrittura in un file txt:
    writer.WriteLine
    oppure 
    writer.Write

    Direi che a questo punto, avendo tutti gli elementi e chiarimenti del caso, il richiedente possa capire, determinare e decidere come operare con i suoi file Txt. 

  • Re: Scrivere file di testo senza riga finale vuota

    Come dicevo all'OP (e la ripeto a te) quell'ultima linea non esiste ma è solamente un modo dell'editor utilizzato per evidenziare che la linea precedente ha un ritorno a capo.

    Non aggiungere il ritorno a capo nell'ultima linea rende il file malformato e basta.

    Pensavo di essere stato chiaro ma evidentemente non lo sono stato. Questa richiesta non ha alcun senso, cosa comprensibile per chi inizia, ancora più senza senso tentare di dare una "soluzione".

  • Re: Scrivere file di testo senza riga finale vuota

    Mi ripeto anch'io, ho descritto cosa accade utilizzando un metodo oppure un altro metodo.

    Quindi mi pare molto lampante e semplicissimo l'esempio che dimostra e spiega esattamente cosa accade all'ultimo record del file txt.

    Non ho mai affermato che sia giusto o sbagliato.

    Attribuirmi cose che non ho mai detto e pensato mi sembra del tutto inutile. Non capisco proprio il fine.

    Come detto nei post precedenti starà all'utente capire e decidere cosa fare studiando anche i link del supporto Microsoft che gli ho fornito in precedenza per poter approfondire l'argomento. https://learn.microsoft.com/it-it/dotnet/api/system.io.streamwriter?view=net-9.0

    03/02/2025 - oregon ha scritto:

    Come dicevo all'OP (e la ripeto a te)

    In ultimo faccio presente che so perfettamente come funziona un file txt e molto di più... e non ho bisogno di alcuna ripetizione in tal senso.

    Pure io Pensavo di essere stato molto esaustivo con esempi semplici ed esplicativi, a prova di neofiti. Ma allo stesso tempo posso ben capire che se sussiste una certa predisposizione, diventa tutto vano. 

    Poi se nei post che faccio si vuole leggere cose non scritte e ne pensate, allora non ci posso fare proprio nulla.

  • Re: Scrivere file di testo senza riga finale vuota

    Lui scrive 

    mi aggiunge una linea vuota alla fine del file

    e io voglio solo fargli capire che non è vero. Non esiste alcuna linea aggiunta. E che non esiste alcun codice che rimedi al problema dato che il problema non c'è.

    Penso, ma è solo una mia opinione, che mostrare il funzionamento dei due metodi possa solo aggiungere confusione alla sua confusione perchè quello che pensa lui che succeda è che, con quel codice, non venga più aggiunta una linea alla fine.

    Tutto qui

Devi accedere o registrarti per scrivere nel forum
10 risposte