• Domingo 28 de Abril de 2024, 20:58

Autor Tema:  Ayuda Para Un Viejo Programador...  (Leído 1338 veces)

emilio_n

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Ayuda Para Un Viejo Programador...
« en: Viernes 27 de Abril de 2007, 18:16 »
0
Hola a todos.

Tengo que hacer un programita para ayudarme en una tediosa tarea que me han caido en la oficina.

Tengo unos 300 ficheros a los que tengo que quitarles las dos primeras lineas para quitar una cabecera y realizar un informe.

Hace unos años mi carrera de programador terminó y me dediqué a cosas mucho peores... :-(

Bueno, el caso es que al ver el horrible trabajo que se me venía encima, pensé que me resultaría sencillo realizar un programa en C o en otro leguaje para quitar las lineas de los ficheros.

Pero al buscar código fuente y buscar las funciones que necesitaría, me he dado cuenta de que no me acuerdo de nada!!
Aparte de frustrado estoy un poco estresado por el mogollón que me viene con las dichosas cabeceras y he pensado en pedir ayuda a un alma caritativa que programe habitualmente... seguro que son pocas lineas y fáciles para el que lo tenga mas fresco...

Mi idea es subir todos los ficheros al mismo directorio en el que copie el programa y que los cambie todos de golpe.

¿Sabeis si es sencillo? ¿Podeis echarme una mano?
Me da un poco de cosa, porque me parece un poco morro pedirlo asi tan abiertamente, pero de verdad que me salvariais la vida.... :-)

Muchas gracias de antemano por vuestra ayuda!!!
Emilio.

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Ayuda Para Un Viejo Programador...
« Respuesta #1 en: Viernes 27 de Abril de 2007, 20:01 »
0
es bastante facil lo que queres hacer. Que sistema operativo usas?, esto depende si tenes que usar la API de win o de linux para recorrer el directorio.
Luego en el problema en cuestion una solucion posible es crear un fichero auxiliar por cada archivo y copiar a partir de la tercera linea hasta el final. Luego de terminar la operacion eliminar el archivo originar y renombrar el auxiliar con el nombre del mismo.

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Ayuda Para Un Viejo Programador...
« Respuesta #2 en: Viernes 27 de Abril de 2007, 21:20 »
0
Utiliza un programa llamado TexRep, puedes descargarlo de aca, este te sirve para el proposito que planteas.

Ojala te sirva.
Chao
El pasado son solo recuerdos, el futuro son solo sueños

emilio_n

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Ayuda Para Un Viejo Programador...
« Respuesta #3 en: Sábado 28 de Abril de 2007, 10:28 »
0
Muchas gracias por vuestra respuesta!!

AnioN, Tu planteamiento suena fenomenal! Por lo que dices con unas pocas lineas de código lo tendría montado!  
El sistema en el que trabajo y en el que voy a tener que eliminar las dos primeras filas de todos los ficheros, es W2K.
Los ficheros son simples TXT con la extensión cambiada (Por ejemplo, *.d01, *.d02,...) y en los que la cabecera a eliminar siempre es igual.

RadicalEd, el programa que me has indicado está genial! Lo malo es que me puede eliminar un string, (Podría usarlo una vez para cada linea y estaría solucionado) pero no veo forma de hacer que el programa elimine las dos lineas en blanco que deja. Es decir elimina el texto, no la linea...

Voy a pegarme con ello a ver si saco algo, pero de verdad que no os podeis imaginar lo olvidado que tengo esto... Me temo que voy a tener que utilizar mis viejos apuntes y empezar por un "hola mundo" y tirarme todo el fin de semana haciendo ejercicios. De otra forma, me esperan hora y horas de "abre archivo, borra lineas, salva archivo" :-(

De verdad, muchas gracias por vuestra respuesta y si me podeis ayudar en algo os estaré realmente agradecido.

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Ayuda Para Un Viejo Programador...
« Respuesta #4 en: Sábado 28 de Abril de 2007, 13:54 »
0
Este codigo te puede ayudar a no tener que lidiar mucho con la API. Sirve para recorrer el contenido de un directorio.

Código: Text
  1. #define _WIN32_WINNT 0x0501
  2.  
  3. #include <windows.h>
  4. #include <stdio.h>
  5. #include <malloc.h>
  6. #include <tchar.h>
  7. #include <wchar.h>
  8. #include <strsafe.h>
  9.  
  10. #define BUFSIZE MAX_PATH
  11.  
  12. int _tmain(int argc, TCHAR *argv[])
  13. {
  14.    WIN32_FIND_DATA FindFileData;
  15.    HANDLE hFind = INVALID_HANDLE_VALUE;
  16.    DWORD dwError;
  17.    LPTSTR DirSpec;
  18.    size_t length_of_arg;
  19.  
  20.    DirSpec = (LPTSTR) malloc (BUFSIZE);
  21.    
  22.    // Check for the directory to query, specified as
  23.    // a command-line parameter; otherwise, print usage.
  24.    if(argc != 2)
  25.    {
  26.        _tprintf(TEXT("Usage: Test <dir>\n"));
  27.       return 2;
  28.    }
  29.  
  30.    // Check that the input is not larger than allowed.
  31.    StringCbLength(argv[1], BUFSIZE, &length_of_arg);
  32.    if (length_of_arg > (BUFSIZE - 2))
  33.    {
  34.       _tprintf(TEXT("Input directory is too large.\n"));
  35.       return 3;
  36.    }
  37.  
  38.    _tprintf (TEXT("Target directory is %s.\n"), argv[1]);
  39.  
  40.    // Prepare string for use with FindFile functions.  First,
  41.    // copy the string to a buffer, then append '\*' to the
  42.    // directory name.
  43.    StringCbCopyN (DirSpec, BUFSIZE, argv[1], length_of_arg+1);
  44.    StringCbCatN (DirSpec, BUFSIZE, TEXT("\\*"), 2*sizeof(TCHAR));
  45.  
  46.    // Find the first file in the directory.
  47.    hFind = FindFirstFile(DirSpec, &FindFileData);
  48.  
  49.    if (hFind == INVALID_HANDLE_VALUE)
  50.    {
  51.       _tprintf (TEXT("Invalid file handle. Error is %u.\n"),
  52.                 GetLastError());
  53.       return (-1);
  54.    }
  55.    else
  56.    {
  57.       _tprintf (TEXT("First file name is: %s\n"),
  58.                 FindFileData.cFileName);
  59.    
  60.       // List all the other files in the directory.
  61.       while (FindNextFile(hFind, &FindFileData) != 0)
  62.       {
  63.          _tprintf (TEXT("Next file name is: %s\n"),
  64.                    FindFileData.cFileName);
  65.       }
  66.    
  67.       dwError = GetLastError();
  68.       FindClose(hFind);
  69.       if (dwError != ERROR_NO_MORE_FILES)
  70.       {
  71.          _tprintf (TEXT("FindNextFile error. Error is %u.\n"),
  72.                    dwError);
  73.          return (-1);
  74.       }
  75.    }
  76.  
  77.    free(DirSpec);
  78.    return (0);
  79. }
  80.  

http://msdn2.microsoft.com/en-us/library/aa365200.aspx

Y aca como manejar archivos de texto en C.

http://www.conclase.net/c/ficheros/index.php