Ciao, ho provato a risolvere il tuo problema e sono riuscito ad abbozzare un codice C che prende in input il un file con la redirezione del comando "ls -la" e gestisce gli spazi da aggiungere per otterene un output formattato secondo un altro stardard! Io ho lavorato su Ubuntu 10.04 in versione ancora alfa, e dal comando ls -la ottenevo una roba simile:
Non so perchè ma ottengo delle stringhe composte da 8 sottostringhe, invece quello che hai postato tu conta 9 sottostringhe, quindi...devi fare un cambiamento al mio codice che posto qua sotto:codice:totale 24 drwxr-xr-x 2 thecrow thecrow 4096 2010-03-25 13:11 . drwxrwxrwx 75 thecrow thecrow 4096 2010-03-25 13:10 .. -rw-r--r-- 1 thecrow thecrow 0 2010-03-25 13:11 in.txt -rwxr-xr-x 1 thecrow thecrow 7578 2010-03-25 13:11 parsific -rw-r--r-- 1 thecrow thecrow 1165 2010-03-25 13:10 parsific.c
Il programma funziona da riga di comando, prende automaticamente in input il file in.txt, in quanto lo crea tramite una chiamata a sistema:codice:#include <stdio.h> #include <stdlib.h> #include <string.h> int main ( int argc, char* argv[] ) { int vet[9] = {3,1,2,5,1,1,2,1,0}; int k, i, max=0, off=0; char string[256]; char str[64]; int flag=0; FILE *in, *out; system("ls -la > in.txt"); in = fopen ("in.txt","r"); out = fopen (argv[1],"w"); fscanf(in,"%*s%*s"); while ( fscanf(in,"%*s %*s %*s %*s %s %*s %*s %*s %*s", str) != EOF ) { if ( strlen(str) > max ) max = strlen(str); } printf ("%d\n", max); rewind(in); while ( feof(in) != 1 ) { if ( flag == 1 ) { for ( i=0; i<9; i++ ) { fscanf(in,"%s", str); if ( feof(in) == 1 ) return 1; fprintf(out,"%s", str); if ( i == 4 ) off = 4 - strlen(str); else off=0; k=0; while ( k < vet[i]+off ) { fprintf(out," "); k++; } } fprintf (out,"\n"); } else { fgets (string,256,in); fprintf(out,"%s", string); flag = !flag; } } fcloseall(); return 1; }
e poi lo elabora e riscrive il tutto in un nuovo file, passato come parametro, con la nuova formattazione!codice:system("ls -la > in.txt");
Per avviarlo da terminale ovviamente devi passare il nome del file d uscita!
Prova a vedere se funziona qualcosa, io ho fatto delle prove e in genere andava, però magari cambiando sistema o facendo delle prove particolari farà qualche capriccio! fammi sapere... ciaoo!

Rispondi quotando