Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

241
Views
¿Es necesario escribir un if "portátil" (c == '\n') para procesar archivos multiplataforma?

Este pensamiento proviene de una discusión sobre un problema práctico Reemplazar varias líneas nuevas en un archivo con solo una . Ocurrió algo incorrecto al usar un terminal cygwin que se ejecuta en una máquina con Windows 8.1.

Dado que el terminador de fin de línea sería diferente, como \n , \r o \r\n , ¿es necesario escribir un "portátil" if(c=='\n') para que funcione bien en ¿Linux, Windows y OS X? ¿O la mejor práctica es simplemente convertir el archivo con comandos/herramientas?

 #include <stdio.h> int main () { FILE * pFile; int c; int n = 0; pFile=fopen ("myfile.txt","r"); if (pFile==NULL) perror ("Error opening file"); else { do { c = fgetc (pFile); if (c == '\n') n++; // will it work fine under different platform? } while (c != EOF); fclose (pFile); printf ("The file contains %d lines.\n",n); } return 0; }

Actualización1:

¿CRT siempre convertirá los finales de línea en '\ n'?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Si un archivo de entrada se abre en modo binario (el carácter 'b' en la cadena de modo), entonces es necesario preocuparse por la posible presencia de '\r' antes '\n' .

Si el archivo no se abre en modo binario (y tampoco se lee usando funciones binarias como fread() ), entonces no es necesario preocuparse por la presencia de '\r' antes '\n' porque eso se manejará antes que el su código recibe la entrada, ya sea mediante una función del sistema relevante (por ejemplo, un controlador de dispositivo que lee la entrada del disco o desde stdin ) o mediante la implementación de las funciones que usa para leer la entrada del archivo.

Si está transfiriendo archivos entre sistemas (por ejemplo, escribiendo el archivo en Linux y transfiriéndolo a un sistema Windows, donde un programa intenta leerlo), entonces tiene opciones;

  • escriba y lea el archivo en modo no binario, y realice una traducción relevante del archivo al transferirlo entre sistemas. Si usa ftp , esto se puede manejar transfiriendo el archivo usando el modo de texto en lugar del modo binario. Si el archivo se transfiere en modo binario, deberá ejecutar el archivo a través de dos2unix (si transfiere el archivo a unix) o a través de unix2dos (hacia el otro lado).
  • Realice todas sus E/S en modo binario, transfiéralos entre sistemas usando el modo binario y nunca los lea en modo no binario. Entre otras cosas, esto le da un control explícito sobre qué datos hay en el archivo.
  • Escriba su archivo en modo texto, transfiera el archivo como mejor le parezca. Luego solo lea en modo binario y, cuando su código de lectura encuentre un par \r\n , suelte el carácter '\r' .

Podría decirse que el último es el más robusto: el código de escritura puede incluir \r antes de \n caracteres, o puede que no, pero el código de lectura simplemente ignora cualquier carácter '\r' que encuentre antes de un carácter '\n' . Tal código probablemente incluso funcionará si los archivos se editan a mano (por ejemplo, con un editor de texto, que puede configurarse por separado para insertar o eliminar \r y \n ) antes de leerlos.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!