Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di DydBoy
    Registrato dal
    Jul 2005
    Messaggi
    165

    [C/C++] Carriage return per TXT in Windows e Unix

    Ho un tool sviluppato a lavoro che parserizza un file di testo e si ricava strutture da passare ad un processo esterno secondo un certo protocollo.

    Il problema che mi si viene a creare è questo :

    Se il file di testo è scritto sotto Windows il programma fatto girare su piattaforma Unix parserizza male perchè non riconosce lo stesso formato dei Carriage Return (il simbolo di andare a capo per intenderci.)

    Mi sono informato un pò in giro ed ho scoperto che è diverso proprio il protocollo di rappresentazione di un file di testo sulle due diverse piattaforme.

    Come posso realizzare un parser "universale" ?

    (Per aiutarvi vi faccio presente che ad esempio l'FTP con attivata la modalità ASCII fa esattamente questa conversione per il file di testo che passa tra due SO diversi).

    Attendo qualche idea

  2. #2
    m... se non sbaglio l'unica differenza e' che windows usa "\r\n" e unix "\n"...

    quindi non vedo problemi se usi le funzioni std del c come fgets() o simili o cmq... devi arrivare sempre al '\n' per leggere una linea... quindi che ci sia o meno il '\r' non importa...

    O Sbaglio ?

  3. #3
    Utente di HTML.it L'avatar di DydBoy
    Registrato dal
    Jul 2005
    Messaggi
    165
    Esatto, la differenza è quella.

    Io utilizzo la getline() delle STL con delimitatore il '\n' e il problema è che su linux lo \r che rimarrebbe viene inteso come carattere vero e proprio e mi fa sballare tutto il processo di parsing seguente..

    Ci sono un sacco di artefizi che potrei fare ma volevo una cosa il più pulita possibile.. :master:

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 © 2024 vBulletin Solutions, Inc. All rights reserved.