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:
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
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:
#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;
}
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:
system("ls -la > in.txt");
e poi lo elabora e riscrive il tutto in un nuovo file, passato come parametro, con la nuova formattazione!
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!