Ir ao conteúdo

Posts recomendados

Postado

Salve meus nobres, venho através desse post tirar uma dúvida que estou tendo a respeito de um algoritmo em C que estou desenvolvendo. Basicamente eu só preciso mover o cursor até a linha 2- coluna 49 e inserir uma quebra de linha \n. Segue abaixo meu código, e a imagens referentes ao arquivo de saída que preciso inserir esta quebra de linha.


=============== CÓDIGO =======================
 

#include <stdio.h>
#include <string.h>

int main() {
    FILE *arquivo1 = fopen("arquivo1.txt", "r");
    FILE *arquivo2 = fopen("arquivo2.txt", "w");
    char buffer1[1000];
    char buffer2[1000];
    int encontrou1 = 0;
    int encontrou2 = 0;
    int ignorar1 = 0;
    int ignorar2 = 0;

    if (arquivo1 == NULL || arquivo2 == NULL) {
        printf("Erro ao abrir os arquivos.\n");
        return 1;
    }

    while (fgets(buffer1, 1000, arquivo1) != NULL) {
        if (encontrou1 && strstr(buffer1, "@ffea") != NULL) {
            ignorar1 = 1;
        }
        
        if (encontrou1 && !ignorar1) {
            fprintf(arquivo2,"@FFE0\nFF FF FF FF ");
            (*strchr(buffer1,'\n')) = '\0';
            fputs(buffer1, arquivo2);
            fprintf(arquivo2,"FF FF ");
        }
        
        if (strstr(buffer1, "@ffe4") != NULL) {
            encontrou1 = 1;
        }
        
    }
   
    fseek(arquivo1,0,SEEK_SET);
  
    while (fgets(buffer2, 1000, arquivo1) != NULL) {
        if (encontrou2 && strstr(buffer2, "q") != NULL) {
            ignorar2 = 1;
        }
        if (encontrou2 && !ignorar2) {
            (*strchr(buffer2,'\n')) = '\0';
            fputs(buffer2, arquivo2);
            
        }
        if (strstr(buffer2, "@ffea") != NULL) {
            encontrou2 = 1;
        }
    }
    
    fprintf(arquivo2,"\nq\n");
    
    fclose(arquivo1);
    fclose(arquivo2);

    return 0;
}

 

real.png

ideal.png

  • Amei 1
Postado

@André T Franco @André T Franco    nesse arquivo que postou não tem nenhum @ffea ne @ffe4 ,  mas parece que você que guardar 16  valores  Hexadecimais e em seguida pular para linha de vaixo ,  então , não entendi , essas condições que você colocou no código  para  que o arquivo2 seja preenchido , mas seja como for após essas condições serem satisfeitas , use um loop for com 16 repetições e escreva os valores pego por fgets e em seguida atualize o contador para mais 16 valores . e indo assim até o final da string buffer1 que terá até 1000 caracteres  .   !

Postado

@devair1010Boa tarde amigo, obrigado por responder. Perdão kkk, eu só não postei o arquivo1/leitura porque não julguei necessário, só postei o arquivo2 de saída/escrita pelo falo do problema ser somente na saída, mas basicamente o que meu programa faz é ler esse arquivo1 e copiar o conteúdo hexadecimal após essas 2 strings "@ffea" e "@ffe4" e inserindo alguns valores FF entre os valores copiados e um q/n no final. Mais tarde quando tiver no Pc novamente posso mandar uma imagem do arquivo1 pra você entender melhor.

  • Obrigado 1
Postado

Está mesmo lendo um arquivo texto com esses dados ou o que está mostrando é um DUMP de um arquivo binário? Isso usa 3 caracteres por byte mesmo? Exceto pelos headers @b1b2...

  • Curtir 1
  • Obrigado 1
Postado
  Em 10/01/2024 às 16:43, André T Franco disse:

Basicamente eu só preciso mover o cursor até a linha 2- coluna 49 e inserir uma quebra de linha \n

Expandir  

Como quase sempre os fluxos são tipos agregados-lineares (Overwrite), essa solução consistirá na substituição daquele espaço em branco por um caractere de quebra de linha ('\n') — e não inserção.

 

Olá @André T Franco

— Semelhante o que já foi dito:

Supostamente, essa tua solução ainda não será suficiente, porque a linha recém-definida teria uma soma de strings inferior a 16; essa situação, aparentemente, exige, quando possível, complementar 16 strings por linha, sendo a linha abaixo a fonte dessa complementação: supostamente, após encontrar aquela string de controle, envia-se à saída 16 strings e um quebra de linha (se possível, senão envia o resto).

 

 

  • Curtir 1
  • Obrigado 1

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!