Como colocar saída em um arquivo de texto diferente no flex

1

Eu escrevi um programa simples para verificar as palavras de um arquivo de texto é verbo ou não usando flex. Mas eu quero colocar (imprimir) a saída para um arquivo de texto diferente.
É possível? Como farei isso?

Meu código de amostra é:

%%

[\t]+

is   |

am   |

are  |

was  |

were {printf("%s: is a verb",yytext);}

[a-zA-Z]+ {printf("%s: is a verb",yytext);}

. |\n

%%

int main(int argc, char *argv[]){    
    yyin = fopen(argv[1], "r");    
    yylex();         
    fclose(yyin);
}
    
por SKB 17.04.2015 / 16:00

2 respostas

1

Não sei o suficiente sobre lex / flex , mas, dado o código que vejo na pergunta, tentaria adicionar esse código a main() :

FILE * myfd = fopen(argv[2], "w");

e use fprintf() em vez de printf() , como em:

{ fprintf(myfd, "%s: is a verb", yytext); }

Eu usei argv[2] como fonte do nome do arquivo, o que significa que você precisa fornecê-lo como segundo argumento na chamada do programa, mas também pode codificar uma string com um nome de arquivo.

    
por 17.04.2015 / 17:14
0

Você pode simplesmente permitir que seu script imprima os resultados para stdout (saída de terminal normal) e, em seguida, redirecione-o para um arquivo com o > -operator:

Assumindo que seu script é o arquivo /home/USERNAME/bin/isVerb e você deseja verificar a palavra "procrastinar", você o executaria assim:

/home/USERNAME/bin/isVerb procrastinate > /home/USERNMAE/Documents/isVerb-procrastinate.txt

O comando criará o arquivo /home/USERNMAE/Documents/isVerb-procrastinate.txt ou o substituirá se já existir e salvará a saída nele.
Se você preferir que o comando acrescente a saída a um arquivo (se já existir, caso contrário, crie-o), use >> em vez de > .

    
por 17.04.2015 / 18:06

Tags