在文件中找到字符串后替换旁边的字符
Replacing character next to it after find the string in file
我的代码是接受来自命令行参数的值并搜索字符串并替换在每行中的关键字用分隔符分隔的行中找到的字符串之后的下一个字符。
基本上,从缓冲区字符串中找到对应于该字符串的文件指针位置的字符位置后,然后在fp + X处更新字符。我想知道有没有办法做到这一点?
我也对C++没问题。
我有文件.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]);
}
如果有人对此提出意见,将不胜感激
好吧,我不太清楚,你在那里尝试什么,但如果这不是你需要的,请告诉我:
#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] && src[i] != ' ')
i++;
if (src[i] == ' ')
return (-1);
firstOcc = i;
while (src[i] == str[j] && src[i] != ' ' && 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
我不是在文件中搜索,因为您需要一种方法来修改缓冲区,因此我将让您在此处完成其余的工作。
当然,这里需要很多错误检查,但我相信你可以弄清楚你需要做什么。
相关文章:
- 如何用转义符替换字符串中的所有特殊字符
- 删除/替换C++字符串中的多字符 (ÿû)
- 生成随机.txt文件,10行,10列。充满随机:"*"、"#"、"@"。然后将随机字符替换为'P'
- 用 X 替换字符串中的字符C++练习
- 替换 2D 数组中的字符
- 替换字符阵列C 中的字符
- 如何有效地用不同的整数元素替换字符字符串的元素
- C++字符数组查找/替换字符
- 如何使用C++快速就地替换字符
- 通过存储在向量中的字符串的字符迭代以替换字符C
- 如何在C++中读取带有ifstream的替换字符?(ASCII 中的 SUB)
- 替换字符,如替换全部(字符串,开始,结束,"_","-")
- 搜索和替换字符数组 c++ 中出现的所有字符串
- 在字符指针中用内存移动替换字符
- 函数,用于查找和替换字符数组(流)c++中的字符串
- 查找并替换字符数组中的单词
- 用字符串中的 int "替换"字符
- 替换字符数组中的单词
- 替换字符*中的字符
- C++:替换字符时出错