SA-MP Forums Archive
[Tutorial] Funciones de archivos. - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+----- Forum: Lanzamientos/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=59)
+----- Thread: [Tutorial] Funciones de archivos. (/showthread.php?tid=511650)



Funciones de archivos. - Swedky - 06.05.2014

Hola.

En este tutorial estoy decidido a explicarle el uso de las funciones de los archivos. Con ellos se pueden hacer muchas cosas, y aprenderlo es muy ъtil. Por ejemplo, usarlos y adaptarlos a tu GM para cargar datos para el jugador, que es mucho mбs fбcil y mбs rбpido que usar cualquier otro .inc.

Esta funciуn abre un archivo para editarlo/leerlo, tambiйn sirve para crearlo si no existe. Ej:

pawn Код:
public OnGameModeInit()
{
    if(!fexist("Test.txt")) // Verificamos que en 'scriptfiles' no existe el archivo 'Test' con la extensiуn 'txt'.
    {
        // Recuerden que deben aсadirle el tag 'File'.
        new File:INI = fopen("Test.txt", io_write); // Abrimos el archivo 'Test.txt'. Como en este caso no existe, se crearб.
        fwrite(INI, "Password = Tutorial\r\n"); // El '\r\n' es para escribir una nueva lнnea en el archivo.
        fclose(INI); // Cerramos el archivo.
    }
    return 1;
}

Tengan en cuenta que esto tiene 4 modos de usarlo, los cuales son:
Para leer una lнnea o muchas de un archivo, debemos guardarla en una variable. Ejemplo:

pawn Код:
// Supondremos que en el archivo 'Test.txt', la primera lнnea es: Password = Tutorial\r\n
public OnGameModeInit()
{
    new File:INI = fopen("Test.txt", io_read);
    if(INI) // Como 'fopen' devuelve '1' si el archivo abriу exitosamente, aquн verificaremos que lo hizo (en caso contrario devuelve '0').
    {
        new save[27]; // Estas variable almacenarб toda la lнnea.
        fread(INI, string); // Luego explicarй sobre 'fread' - Ahora la variable 'save' serб 'Password = Tutorial\r\n'.
        printf("* INI: %s", string);
        // En la consola dirб: * INI: Password = Tutorial
    }
    return 1;
}

Recuerden que esto borrarб todo lo que tenga el archivo - Esto es usado para abrir el archivo y escribir algo en йl con 'fwrite':

pawn Код:
public OnGameModeInit()
{
    new File:INI = fopen("Test.txt", io_write); // Al hacer esto, 'Password = Tutorial\r\n' serб borrado del archivo.
    if(INI)
    {
        fwrite(INI, "Password = Tutorial\r\n");
        fwrite(INI, "IP = 255.255.255\r\n");
        // No es necesario aсadir '\r\n' a la ъltima lнnea del archivo.
        fclose(INI);
    }
    return 1;
}
Ahora en nuestro archivo:

Код:
Password = Tutorial
IP = 255.255.255
Como bien sabemos, en nuestro archivo tenemos:

Код:
Password = Tutorial
IP = 255.255.255
Ahora escribiremos algo mбs en йl:

pawn Код:
public OnGameModeInit()
{
    new File:INI = fopen("Test.txt", io_append); // Abrirб la ъltima lнnea del archivo para escribir en ella.
    if(INI)
    {
        fwrite("AdminLevel ="); // En el archivo: AdminLevel =
        fwrite(" 10"); // Aquн seguiremos escribiendo en la lнnea que estб posicionado el fichero en el archivo.
        fclose(INI);
    }
    return 1;
}
Y en nuestro archivo encontraremos:

Код:
Password = Tutorial
IP = 255.255.255
AdminLevel = 10
Esto lee una lнnea de un archivo y lo almacena en una cadena. Un ejemplo:

pawn Код:
public OnGameModeInit()
{
    new File:INI = fopen("Test.txt", io_read);
    if(INI)
    {
        new string[3][27];
        fread(INI, string[0], 28); // Leemos la primera lнnea del archivo - 'save[0]' ahora es: Password = Tutorial\r\n - El '28' (tercer argumento/parбmetro) hace referencia a la cantidad de bytes que se leerб en la lнnea.
        fread(INI, string[1]); // Leemos la segunda lнnea del archivo - 'save[1]' ahora es: IP = 255.255.255\r\n
        fread(INI, string[2]); // Leemos la segunda lнnea del archivo - 'save[2]' ahora es: AdminLevel = 10
        fclose(INI);
    }
    return 1;
}


No hay mucho para explicar, pues ya lo he hecho anteriormente. Aunque, tengan en cuenta que si intentan escribir en una direcciуn que no es vбlida, el servidor se crashearб.


Elimina un archivo segъn la ruta que especifiquemos. Tengan en cuenta que la ruta debe ser vбlida.
Esta funciуn devuelve '1' si el archivo se borrу correctamente, caso contrario devuelve '0' si la ruta es invбlida o no tiene permisos para borrar dicho archivo.


Esto da un 'salto' de lнneas en el archivo.
Esta funciуn tiene 3 modos, los cuales son:
Para mбs explicaciуn, veamos el siguiente ejemplo:


pawn Код:
public OnGameModeInit()
{
    new File:INI = fopen("Test.txt", io_read);
    if(INI)
    {
        new string[11];
        fseek(INI, 11, seek_start); // Posicionamos el fichero al caracter nъmero '11' de la prнmera lнnea. En este caso: (vean la imagen de abajo).
        fread(INI, string); // Aquн leera toda la lнnea desde en donde posicionamos el fichero.
        fclose(INI);
    }
    return 1;
}
Imagen:


(palito negro = fichero).

En nuestra cadena almacenada encontraremos:

Код:
Tutorial\r\n
Si queremos quitar el '\r\n', bastarб con hacer esto:


pawn Код:
string[strlen(string)] = '\0'; // '\0' es para vaciar el carбcter - Limpiarб el ъltimo.
string[strlen(string)-1] = '\0'; // Limpiarб el ante-ъltimo.

// '\r' o '\n' ocupan un carбcter.

Y ahora la cadena serб:
Код:
Tutorial
Para leer lнnea por lнnea, usamos 'fread'. Ejemplo:

pawn Код:
public OnGameModeInit()
{
    new File:INI = fopen("Test.txt", io_read);
    if(INI)
    {
        new string[11];
        fread(INI, string); // Leemos la primera lнnea.
        fread(INI, string); // Pasamos a la segunda lнnea.
        fseek(INI, 13, seek_current); // Ahora el fichero estarб posicionado aquн: (vean la imagen de abajo).
        fclose(INI);
    }
    return 1;
}
Imagen:




Para editar una lнnea y guardarla, debemos hacer algo como esto:

pawn Код:
public OnGameModeInit()
{
    new File:INI = fopen("Test.txt", io_read); // Abrimos el archivo para leerlo.
    if(INI)
    {
        new string[3][27];
        fread(INI, string[0]); // Leemos la primera lнnea y guardamos su valor.
        fread(INI, string[1]); // Pasamos a la segunda lнnea, la leemos y la guardamos.
        fread(INI, string[2]); // Pasamos a la tercer lнnea, la leemos y la guardamos.
        fclose(INI); // Aquн lo cerramos para volverlo a abrir, pero esta vez para escribir en йl.
       
        strdel(string[1], 0, 27); // Vaciamos toda la cadena.
        strins(string[1], "IP = 126.124.1.21\r\n", 0)// Ahora la cadena 'string[1]' serб: IP = 126.124.1.21\r\n
       
        INI = fopen("Test.txt", io_write); // Ahora escribiremos la informaciуn guardada.
        fwrite(INI, string[0]);
        fwrite(INI, string[1]);
        fwrite(INI, string[2]);
        fclose(INI);
    }
    return 1;
}

Y en nuestro archivo encontraremos:

Код:
Password = Tutorial
IP = 126.124.1.21
AdminLevel = 10

Bueno, creo que he explicado lo necesario como para entender. He tratado de resumirlo lo mas posible, asн que si encuentran algъn error o tienen alguna duda, estoy a su disposiciуn .


Respuesta: Funciones de archivos. - DesingMyCry - 06.05.2014

De hecho, la mejor forma seria guardando cada tipo de datos en archivos diferentes.


Respuesta: Funciones de archivos. - juandiegox - 06.05.2014

Nada mal enzo, gracias por tomarte tu tiempo, +rep.


Respuesta: Funciones de archivos. - Swedky - 07.05.2014

Quote:
Originally Posted by DesingMyCry
Посмотреть сообщение
De hecho, la mejor forma seria guardando cada tipo de datos en archivos diferentes.
Viйndolo de esa manera, creo que tienes razуn, pero eso no afectarнa notablemente el consumo de memoria?

Juan: gracias .


Respuesta: Funciones de archivos. - BecksLennon - 07.05.2014

Muy ъtil, sigue asн enzo.


Respuesta: Funciones de archivos. - Daniel_Ruiz - 07.05.2014

Gran Tutorial Man (y) +rep (Aunque eso se merece mas que rep un pico jajajaja ok no....)


Respuesta: Funciones de archivos. - OTACON - 08.05.2014

con la explicancion de la wiki es suficiente, pero bueh.

"Un gran tutorial, gracias por el efuerzo,sigue asi".
saludos,



Respuesta: Funciones de archivos. - Swedky - 08.05.2014

Quote:
Originally Posted by OTACON
Посмотреть сообщение
con la explicancion de la wiki es suficiente, pero bueh.

"Un gran tutorial, gracias por el efuerzo,sigue asi".
saludos,
Con tu comentario, veo que dices que el tutorial es realmente innecesario, luego dices que es un genial (lo mas tonto es que lo aсades entre comillas ).

Si ayudй a algunos estoy contento e ignorarй los comentarios estъpidos, no todos sabemos algunas cosas. Si tъ te lo 'sabes' todo, no significa que otros tambiйn.


Respuesta: Funciones de archivos. - OTACON - 08.05.2014

Quote:
Originally Posted by EnzoMetlc
Посмотреть сообщение
Con tu comentario, veo que dices que el tutorial es realmente innecesario, luego dices que es un genial (lo mas tonto es que lo aсades entre comillas ).

Si ayudй a algunos estoy contento e ignorarй los comentarios estъpidos, no todos sabemos algunas cosas. Si tъ te lo 'sabes' todo, no significa que otros tambiйn.

fue una critica constructiva, debes de aprender a tomarlas.
un saludos Enzito.



Respuesta: Funciones de archivos. - JustBored - 08.05.2014

Quote:
Originally Posted by OTACON
Посмотреть сообщение

fue una critica constructiva, debes de aprender a tomarlas.
un saludos Enzito.
їSabes quй es una crнtica constructiva?