c++读取与修改文件中的特定数据

图片说明

            下划线部分的内容修改为我要修改的内容,修改的数据长度不确定,
            且保留其他数据不变
#include<iostream>
#include<fstream>
#include<string>
#include<regex>
using namespace std;
int main() {
    string str;
    int count = 0;
    ifstream in("in.txt");
    getline(in, str);       //读取第一行文本
    in.close();
    regex pat("(-\\w{1,} )([\\d\\w]{1,}) ");  //匹配模式
    regex ip("(([01]{0,1}\\d{0,1}\\d|2[0-4]\\d|25[0-5])\\.){3}[01]{0,1}\\d{0,1}\\d|2[0-4]\\d|25[0-5]"); //存储提取到的数据
    smatch matches;                                     //存储匹配到的字符串
    string replacedate[3] = { "00","11","22" };         //假设依此替换成这些数据
    string result;
    while (regex_search(str, matches, pat)) {
        result += matches.prefix();
        result += string(matches[1]) + replacedate[count++] + " ";    //替换数据
        str = matches.suffix();                     //修改剩余的字符串
    }
    result += str;
    result= regex_replace(str, ip, "255.255.255.255");        //替换ip
    ofstream out("in.txt");
    out << result << endl;
    return 0;
}

图片说明

我姑且理解为,你的文档是被空格分割的9个项目,那么代码如下:

 #include <iostream>

int main()
{
    FILE *fp;
    int len;
    char *ptr;
    char *p;
    if ((fp = fopen("你的文档.txt", "r")) == NULL)
    {
        printf("cannot open infile\n");
    }

    char data[9][32];
    char buf[1024] = { 0 };
    if(fgets(buf, 1024, fp) != NULL)//读取数据
    {
        len = strlen(buf);
        ptr = strtok(buf, " ");
        strcpy(data[0], ptr);
        for (int i = 1; i < 9;i++)
        {
            ptr = strtok(NULL, " ");
            strcpy(data[i], ptr);
        }
    }

    fclose(fp);

    strcpy(data[1], "\\\\192.168.1.20");
    strcpy(data[3], "user");
    strcpy(data[5], "dam321");
    strcpy(data[7], "3");

    if ((fp = fopen("你的文档.txt", "w")) == NULL)
    {
        printf("cannot open infile\n");
    }

    sprintf(buf, "%s %s %s %s %s %s %s %s %s", data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8]);
    fputs(buf, fp);

    fclose(fp);
    return 0;
}