Problemi con EndOfLine

Buongiorno a tutti…
Innanzitutto qualcuno sar gi in ferie, leggendo questo post dal telefonino o dal portatile ( in questo caso ovvia la fulminata da parte della moglie … : <<ma ti dovevi portare il computer anche in vacanza ???>>. ) Va b !
Beati voi in ogni caso.

Allora ho un problema con EndOfLine.
Ho un testo ( una tabella txt separata da tabulazione ) in formato UTF8 delimitato da EndOfLine di tipo Windows ( 0D 0A ) oppure chr(13)+chr(10) o a meglio dire CR+LF

Parto con il presupposto che il testo arriva da clipboard, e che quando viene incollato l’utente non ne conosce il tipo di encoding e il tipo di delimitazione delle righe;
quindi ne converto la codifica nel formato UTF8.

    dim c as new clipboard
    If c.textAvailable Then
      dim testo as string = c.text.ConvertEncoding(Encodings.UTF8)
      // faccio quello che devo fare  
      end if 

A questo punto non conosco nemmeno come termina la riga :

  • LF: Multics, sistemi Unix e sistemi Unix-like (GNU/Linux, AIX, Xenix, macOS, etc.), BeOS, AmigaOS, RISC OS e altri
  • CR+LF: DEC RT-11 e molti altri non-Unix, non-IBM OSes, CP/M, MP/M, MS-DOS, OS/2, Microsoft Windows
  • CR: Macchine Commodore, famiglia Apple, Mac OS fino alla versione 9 inclusa

Dove LF il codice carattere decimale 10, 0A in esa, CR il codice carattere decimale 13, 0D in esa;

A questo punto per utilizzando diversi sistemi per convertire tali caratteri di End Of Line comunque non ottengo il risultato.

  1. utilizzando : testo = replaceall(testo,chr(13)+chr(10),endofline.UNIX) NON FUNZIONA
  2. convertendo con l’apposita funzione : testo = ReplaceLineEndings(testo, EndOfLine.UNIX) NON FUNZIONA

Alla fine popolo un array con le righe utilizzando : righe() = split(testo,EndOfLine.UNIX), e ottengo una riga si e una riga no il testo, e rispettivamente, una riga vuota. In debug la riga vuota non contiene nulla.

Qui un video che mostra il problema.
Problema con CR+LF Windows

Ti consiglio di riverificare e casomai controllare il testo iniziale.
ReplaceLineEndings(testo, endOfLine.UNIX) funziona (per curiosit fatto un testo su tutti e 3 i sistemi)
e di conseguenza anche lo split.
Probabilmente gi la variabile testo ha dei EndOfLine extra

In questo caso il debugger ti di aiuto visto che ti permette di vedere la lunghezza in bytes della stringa e il suo contenuto a livello di byte.

Capito il problema.
Quando crei la clipboard li che si creano le linee in pi (solo su macOS con un testo con CRLF) in questo caso la coppia CRLF viene trasformata in CRCR da cui il doppio a capo che ti incasina il tutto.
testo = ReplaceLineEndings(testo, EndOfLine.UNIX).replaceAll(EndOfLine.UNIX + EndOfLine.UNIX, EndOfLine.UNIX)

risolve il problema