Замена символа рядом с ним после поиска строки в файле - PullRequest
0 голосов
/ 03 апреля 2019

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

В основном посленайти позицию символа из строки буфера, которая соответствует позиции указателя файла этой строки, затем обновить символ в 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, &last); token; token = strtok_r(NULL, sep, &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 Ответ

0 голосов
/ 03 апреля 2019

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

#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: %s\n", arr );

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

    printf("After:  %s\n " , 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] != '\0')
    {

        while (src[i] != str[0] && src[i] != '\0')
            i++;

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

        firstOcc = i;

        while (src[i] == str[j] && src[i] != '\0' && str[j] != '\0')
        {
            i++;
            j++;
        }

        if (str[j] == '\0')
            return ( firstOcc );
        if (src[i] == '\0')
            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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...