#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
Я не искал в файле, потому что вам нужен способ изменить ваш буфер, поэтому я позволю вам выполнить остальную часть работы здесь.
Конечно, здесь требуется много проверок на ошибки, но я уверен, что вы можете выяснить, что вам нужно сделать.