Замена символа рядом с ним после поиска строки в файле

#c #c #file

#c #c #файл

Вопрос:

Мой код состоит в том, чтобы принять значения из аргументов командной строки и выполнить поиск строки и заменить следующий символ после строки, найденной в строке, где ключевое слово в каждой строке разделено символами.

В основном, после нахождения позиции символа в строке буфера, которая соответствует позиции указателя файла в этой строке, затем обновите символ на fp X. Я хочу знать, есть ли способ сделать это?

Я тоже в порядке с C .

У меня есть file.txt как показано ниже

 FOO,val1=0,val2=0
BAR,val1=0,val2=0
TOO,val1=0,val2=0
  

Командная строка

 #./a.out FOO val1 1
  

mycode.c

 char        buffer[kKEYWORD_SIZE];
FILE*       fd;

if ((fd = fopen(file.txt, "r ")) != NULL)
{
    do
    {
        memset(buffer, 0x0, kKEYWORD_SIZE);
        if (fgets(buffer, kKEYWORD_SIZE, fd) != NULL)
        {
           //storing the entire line into pointer to character array.
            for (index = 0, token = strtok_r(buffer, sep, amp;last); token; token = strtok_r(NULL, sep, amp;last), index  )
                strcpy(*(keyword   index), token);


           // the first keyword found and search for 2nd keyword and replaces its value   
            if (strcmp(*(keyword   0), key1) == 0)
            {
               if ( ( find = strstr(buffer, key2 )) != NULL )
                {
                      // I want fp pointers to move it to find 5
                      fputs(fp,argv[3]);
                }
  

было бы весьма признателен, если бы кто-нибудь пролил свет на это

Комментарии:

1. fseek(fd, offset, SEEK_CUR) Помогло бы? Вам нужно вычислить, каким offset должно быть.

Ответ №1:

Ну, мне не очень понятно, что вы там пытаетесь, но если это не то, что вам нужно, пожалуйста, дайте мне знать:

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

int findFOO( const char *const ptr, const char *const substr );
int search( const char *const src, const char *str );

size_t findOCC ( char *const src, const char *substr );

int main ( void )
{
    char arr[] = "FOO,val1=0,val2=0" ;

    printf("Before: %sn", arr );

    size_t len = findOCC( arr, "var1" );
    arr[len] = '1';

    printf("After:  %sn " , arr );

}

int findFOO( const char *const ptr, const char *const substr )
{
    char *ret = strstr( ptr, substr );
    if ( ret == NULL )
    {
        return 0;
    }
    return 1;
}


int search( const char *const src, const char *const str )
{
    int i, j, firstOcc;
    i = 0, j = 0;

    while (src[i] != '')
    {

        while (src[i] != str[0] amp;amp; src[i] != '')
            i  ;

        if (src[i] == '')
            return (-1);

        firstOcc = i;

        while (src[i] == str[j] amp;amp; src[i] != '' amp;amp; str[j] != '')
        {
            i  ;
            j  ;
        }

        if (str[j] == '')
            return ( firstOcc );
        if (src[i] == '')
            return (-1);

        i = firstOcc   1;
        j = 0;
    }
    return 0;
}

size_t findOCC ( char *const src, const char *substr )
{
    char buffer[strlen( src)   1 ];
    strcpy( buffer, src );
    if ( findFOO ( src, "FOO" ) )   /// Search if there is a Line containing FOO
    {

        int ret = search( buffer, substr );
        if ( ret ) /// found a Match
        {
            char *tmp = strtok( buffer, "=" );
            return strlen( tmp )   1; /// return the index
        }

    }
    return 0;
}
  

Вывод:

 Before: FOO,val1=0,val2=0
After:  FOO,val1=1,val2=0
  

Я не искал в файле, потому что вам нужен способ изменить ваш буфер, поэтому я позволю вам выполнить остальную часть работы здесь.

Конечно, здесь требуется много проверок на ошибки, но я уверен, что вы можете выяснить, что вам нужно сделать.