Task

Remove a specific line or a number of lines from a file.

This should be implemented as a routine that takes three parameters (filename, starting line, and the number of lines to be removed).

For the purpose of this task, line numbers and the number of lines start at one, so to remove the first two lines from the file foobar.txt, the parameters should be: foobar.txt, 1, 2

Empty lines are considered and should still be counted, and if the specified line is empty, it should still be removed.

An appropriate message should appear if an attempt is made to remove lines beyond the end of the file.




 
#include <hopper.h>
 
main:
   .ctrlc
   fd=0,fw=0
   fopen(OPEN_READ,"archivo.txt")(fd)
   if file error? 
      {"no pude abrir el archivo de lectura: "}
      jsub(show error)
   else
      fcreate(CREATE_NORMAL,"archivoTmp.txt")(fw)
      if file error? 
          {"no pude crear el archivo para escritura: "}
          jsub(show error)
      else
          get arg number(2,desde),  // from line
          get arg number(3,hasta),  // to line
 
          line read=0
          while( not(feof(fd)))
             fread line(1000)(fd), ++line read
             if(not( {line read} between(desde, hasta)))
                 {"\n"}cat,writeline(fw)
             endif 
          wend
      endif
   endif
   fclose(fw)
   fclose(fd)
   system("mv archivoTmp.txt archivo.txt")
exit(0)
.locals
show error:
  file error, println
back
 