Entrada/Salida desde archivo externo en C/C++, Java y Python para Programación Competitiva – Part 1

En la programación competitiva, la mayoría de las veces necesitamos ingresar datos para verificar nuestro código manualmente. Pero se volvería engorroso si tenemos preguntas como gráficos, strings o entrada voluminosa de datos de entrada porque definitivamente se agotará el tiempo de espera o aumentarán las posibilidades de escribir datos incorrectos. 
Podemos deshacernos fácilmente del problema simplemente guardando los casos de prueba en el archivo especificado en la ubicación deseada según nuestra facilidad. Estos son útiles en concursos como Facebook Hackercup , Google Codejam . Estas competiciones no proporcionan un entorno similar al de un juez en línea, sino que le piden que cargue archivos de entrada y salida.
Para Entrada/Salida, básicamente usamos estos dos tipos de modos de acceso a archivos, es decir, 
 

  • “r”: significa leer, ya que abre el archivo para la operación de entrada, pero el archivo debe existir en la ubicación especificada. 
     
  • “w”: Significa escribir, ya que crea un archivo vacío para las operaciones de salida. Si ya existe un archivo con el mismo nombre, su contenido se descarta y el archivo se trata como un nuevo archivo vacío. 
     

C/C++

En C/C++ podemos usar freopen para entrada y salida estándar. La sintaxis de esta función como: – 
 

FILE * freopen(const char * filename, const char * mode, FILE * stream );
  • filename: Hace referencia al nombre del archivo que queremos abrir.
  • modo: Discutido arriba.
  • flujo: Puntero a un objeto ARCHIVO que identifica el flujo que se va a reabrir. 
     

También podemos usar la constante simbólica ONLINE_JUDGE para fines de depuración. Como la mayoría de los jueces en línea agregan esta bandera al final de la línea de comando antes de ejecutar nuestro código. Por ejemplo, en C++ 11, se compilaría como 
 

-std = c++0x -O2 -static -s -lm -DONLINE_JUDGE

Entonces podemos aprovechar eso usando la directiva de preprocesador C.
 

también podemos hacer lo mismo usando ONLINE_JUDGE en java, pero a partir de ahora no funciona en codechef pero funciona en codeforces. 

CPP

// Below is C/C++ code for input/output
#include<stdio.h>
 
int main()
{
#ifndef ONLINE_JUDGE
 
    // For getting input from input.txt file
    freopen("input.txt", "r", stdin);
 
    // Printing the Output to output.txt file
    freopen("output.txt", "w", stdout);
 
#endif
    return 0;
}

Java

// Java code for I/O
import java.io.*;
// this does not works in codechef but works in codeforces
class GFG {
    public static void main(String[] args)
        throws IOException
    {
        if (System.getProperty("ONLINE_JUDGE") == null) {
            // Redirecting the I/O to external files
 
            // as ONLINE_JUDGE constant is not defined which
            // means
 
            // the code is not running on an online judge
 
            PrintStream ps
                = new PrintStream(new File("output.txt"));
            InputStream is
                = new FileInputStream("input.txt");
 
            System.setIn(is);
            System.setOut(ps);
        }
    }
}
// This code is contributed by Rahul Mandal

JAVA

En Java, podemos usar la clase BufferedReader para la entrada rápida y la clase PrintWriter para la representación formateada en la salida junto con las clases FileReader y FileWriter. 
 

  • FileReader (nombre de archivo de string): este constructor crea un nuevo FileReader e indica al analizador que lea el archivo de ese directorio. El archivo debe existir en esa ubicación especificada.
  • FileWriter (String fileName): este constructor crea un objeto FileWriter en la ubicación especificada.

Java

// Java program For handling Input/Output
import java.io.*;
class Main
{
    public static void main(String[] args) throws IOException
    {
        // BufferedReader Class for Fast buffer Input
        BufferedReader br = new BufferedReader(
                               new FileReader("input.txt"));
 
        // PrintWriter class prints formatted representations
        // of objects to a text-output stream.
        PrintWriter pw=new PrintWriter(new
                BufferedWriter(new FileWriter("output.txt")));
 
        // Your code goes Here
 
        pw.flush();
    }
}
// Thanks to Saurabh Kumar Prajapati for providing this java Code

PITÓN

En python, primero importamos el módulo sys (sistema), luego usaremos la función open() que devuelve el objeto de archivo, que se usa comúnmente con dos argumentos: abierto (nombre de archivo, modo). 
 

  • El primer argumento es una string que contiene el nombre del archivo.
  • El segundo argumento es otra string (modo) que contiene algunos caracteres que describen la forma en que se usará el archivo.

Python

# Below is Python code for input/output
 
import sys
# For getting input from input.txt file
sys.stdin = open('input.txt', 'r')
 
# Printing the Output to output.txt file
sys.stdout = open('output.txt', 'w')

Este artículo es una contribución de Shubham Bansal . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *