Ir ao conteúdo

Posts recomendados

Postado

Boa noite, estou criando um programa em C que cria um documento, queria inserir um cabeçalho na criação desse documento que o programa vai gerar.

 

Era tipo assim, quando criasse o aquivo já vim com Nome, Sobrenome, Empresa e Cargo.

 

	printf("antes da linha de listar os arquivos \n");
	system("ls -R *.csv > /home/clientes/Danylo/ListaDeArquivos.csv"); //Cria um arquivo com o nome de todos os arquivos com extensão .csv.
	printf("depois da linha de listar os arquivos \n ");
	
	strcpy(arquivo,"/home/clientes/Danylo/ListaDeArquivos.csv"); //Vai abrir o arquivo que foi criado.
	alltrim(arquivo);

 

Postado

Se for manter usando apenas os comandos do Linux ao invés dos recursos da linguagem C, uma opção seria usar o programa head primeiro com argumento -qn 1 para pegar apenas a primeira linha de 1 dos arquivos, e no tail usaria >>, ao invés de >, para anexar ao fim do arquivo ao invés de sobrescrever/apagar o conteúdo anterior do arquivo.

head -qn 1 arquivo1.csv > saida.csv
tail -qn +2 arquivo1.csv aquivo2.csv arquivo3.csv >> saida.csv

Assim o primeiro comando pega apenas a primeira linha do arquivo1 e põe na saida. E o segundo comando anexa à saída os conteúdos dos 3 arquivos a partir da segunda linha de cada um.

Postado

O seu arquivo CSV usa com vírgula ou ponto-e-vírgula como separador de colunas?

 

Assumindo que use ponto-e-vírgula, usando a linguagem C seria algo desse tipo:

FILE *arq = NULL;

arq = fopen("caminho/arquivodesaida.csv", "w"); //cria e abre o arquivo
if (!arq){ //checa se falhou na tentativa de abrir o arquivo
    perror("Erro");
    exit(1);
}

//Imprime o cabeçalho no arquivo
fprintf(arq, "Nome;Sobrenome;Empresa;Cargo\n");

fclose(arq); //fecha o arquivo

Assim cria o arquivo com o cabeçalho na primeira linha.

 

Aí se vai usar o programa tail para pegar o conteúdo dos arquivos, ainda precisa usar >> para anexar fim do arquivo, ao invés de > que sobrescreveria o conteúdo do arquivo.

tail -qn +2 arquivo1.csv aquivo2.csv arquivo3.csv >> caminho/arquivodesaida.csv

 

Postado

@isrnick esta dando um erro de "No such file or directory".

printf("antes da linha de listar os arquivos \n");
	system("ls -R *.csv > /home/clientes/Danylo/ListaDeArquivos.csv"); //Cria um arquivo com o nome de todos os arquivos com extensão .csv.
	printf("depois da linha de listar os arquivos \n ");
	
	strcpy(arquivo,"/home/clientes/Danylo/ListaDeArquivos.csv"); //Vai abrir o arquivo que foi criado.
	alltrim(arquivo);

coloco antes ou depois do System.

Postado

O erro é por que não existe essa pasta 'caminho', você deveria ajustar para o seu caso colocando a pasta e nome do arquivo que vai usar no seu programa.

 

Então isso vai depois que define o nome do arquivo de saída, que inclui data e hora se me lembro corretamente de outro tópico.

adicionado 49 minutos depois

 

 

 

Obs: Esse programa inteiro poderia ser substituído por um shell script simples assim:

FILE1=$(date +/caminho/da/pasta/de/ArqsJuntosData%FHora%Hh%Mm%Ss.csv)
FILE2=$(ls -1 *.csv | head -1)
head -1 $FILE2 > $FILE1
FILES=$(ls *.csv)
tail -qn +2 $FILES >> $FILE1
mv $FILES /caminho/da/pasta/de/backup

1- FILE1 é o nome do arquivo com tudo junto

2- FILE2 é o primeiro arquivo CSV encontrado na pasta atual

3- Pega o cabeçalho do FILE2 e põe no FILE1

4- FILES são os nomes de todos os arquivos CSV na pasta atual

5- Adiciona o conteúdo de todos os arquivos CSV na pasta atual ao FILE1

6- Move todos os arquivos CSV da pasta atual para a pasta backup

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...