精华内容
下载资源
问答
  • /* Filename: word-replace.c* Description: 替换文件中指定的单词为其他字符串并输出到指定的文件*/#include#include#include#include#define MAX_WORDS_LEN 50 // 单词的最大长度限制typedef e...

    匿名用户

    1级

    2009-06-11 回答

    给你个单词替换的例子,稍微改改就可以达到你的要求了。

    /* Filename: word-replace.c

    * Description: 替换文件中指定的单词为其他字符串并输出到指定的文件中

    */

    #include

    #include

    #include

    #include

    #define MAX_WORDS_LEN 50 // 单词的最大长度限制

    typedef enum { FALSE = 0, TRUE = 1 } BOOL;

    struct Word {

    char str[MAX_WORDS_LEN + 1]; // 存储字符串

    BOOL isWord; // 是否为单词

    };

    typedef struct Node { // 使用链表存储解析后的字符串

    struct Word word;

    struct Node *next;

    } *List;

    enum Option { // 单词替换选项

    MATCH_WORD_CASE, // 精确匹配单词区分大小写

    MATCH_WORD_NOCASE, // 匹配单词但不区分大小写

    };

    // 函数功能:出错处理方法,打印出错信息并退出程序

    void complain(const char *msg)

    {

    printf("%s\n", msg);

    exit(EXIT_FAILURE);

    }

    // 函数功能:将结构体单词 w 插入不带头节点的单向不循环链表 L 的末尾

    // 参数L:不带头节点的单向不循环链表的表头指针

    // 参数w:指向待插入链表 L 的结构体单词信息的指针

    void insert_list(List * L, const struct Word *w)

    {

    struct Node *node = (struct Node *)malloc(sizeof(struct Node));

    node->word = *w, node->next = NULL;

    if (*L != NULL) { // 链表非空,则寻找链表的末尾并插入

    struct Node *p;

    for (p = *L; p->next != NULL; p = p->next) ;

    p->next = node;

    } else // 链表为空,直接插入

    *L = node;

    }

    // 函数功能:打印不带头节点的单向不循环链表,参数L为该链表的表头指针

    void print_list(List L)

    {

    for (struct Node * p = L; p; p = p->next)

    printf("%s|%d\n", p->word.str, p->word.isWord);

    }

    // 函数功能:销毁不带头节点的单向不循环链表,参数L为该链表的表头指针

    void dump_list(List L)

    {

    for (struct Node * p = L, *n; p; p = n) {

    n = p->next;

    free(p);

    }

    }

    // 函数功能:不区分大小写的字符串比较函数,该函数不是标准C语言的库函数

    int stricmp(const char *dst, const char *src)

    {

    int ch1, ch2;

    do {

    if (((ch1 = (unsigned char)(*(dst++))) >= 'A') && (ch1 <= 'Z'))

    ch1 += 0x20;

    if (((ch2 = (unsigned char)(*(src++))) >= 'A') && (ch2 <= 'Z'))

    ch2 += 0x20;

    } while (ch1 && (ch1 == ch2));

    return (ch1 - ch2);

    }

    // 函数功能:解析文件指针fp_ro所指文件中的字符串,将其中的单词和非单词分离

    // 出来,并将分离的结果存储到不带头节点的单向不循环链表L中。如果

    // 函数成功执行,返回TRUE,否则返回FALSE。

    BOOL word_parse(FILE * fp_ro, List * L)

    {

    if (fseek(fp_ro, 0L, SEEK_END))

    return FALSE;

    const long fsize = ftell(fp_ro);

    if (fseek(fp_ro, 0L, SEEK_SET))

    return FALSE;

    char *buf = (char *)malloc(fsize + 1);

    if (buf && fread(buf, fsize, 1, fp_ro) != 1 && ferror(fp_ro))

    complain("Internal error.");

    struct Word w;

    char pword[MAX_WORDS_LEN + 1];

    for (size_t i = 0, index = 0; i < (size_t) fsize;) {

    index = 0;

    while (!isalpha(buf[i]) && i < (size_t) fsize) { // 非字母

    pword[index++] = buf[i++];

    if (index == MAX_WORDS_LEN) { // 缓冲区溢出情况的处理

    pword[index] = '\0'; // strncpy不自动添加'\0'

    strncpy(w.str, pword, index + 1);

    w.isWord = FALSE;

    insert_list(L, &w);

    index = 0;

    }

    }

    if (index != 0) {

    pword[index] = '\0'; // strncpy不自动添加'\0'

    strncpy(w.str, pword, index + 1);

    w.isWord = FALSE;

    insert_list(L, &w);

    }

    index = 0;

    while (isalpha(buf[i]) && i < (size_t) fsize) { // 单词

    pword[index++] = buf[i++];

    if (index == MAX_WORDS_LEN) // 缓冲区溢出情况的处理

    complain("Too long word in source file.");

    }

    if (index != 0) {

    pword[index] = '\0'; // strncpy不自动添加'\0'

    strncpy(w.str, pword, index + 1);

    w.isWord = TRUE;

    insert_list(L, &w);

    }

    }

    free(buf);

    return TRUE;

    }

    // 函数功能:根据替换选项opt,替换在不带头节点的单向不循环链表L中的

    // 单词fnd为新的字符串rep,并返回替换的次数。

    int word_replace(List L, enum Option opt, const char *fnd, const char *rep)

    {

    int rep_cnt = 0; // 替换发生的次数

    switch (opt) {

    case MATCH_WORD_CASE:

    for (struct Node * p = L; p; p = p->next)

    if (p->word.isWord == TRUE && strcmp(p->word.str, fnd) == 0)

    strcpy(p->word.str, rep), rep_cnt++;

    break;

    case MATCH_WORD_NOCASE:

    for (struct Node * p = L; p; p = p->next)

    if (p->word.isWord == TRUE && stricmp(p->word.str, fnd) == 0)

    strcpy(p->word.str, rep), rep_cnt++;

    break;

    default:

    fprintf(stderr, "Invalid option for function %s.", __func__);

    }

    return rep_cnt;

    }

    // 函数功能:将不带头节点的单向不循环链表 L 中的单词(字符串)按顺序存入由

    // fp_wr所指的文件中。如果函数成功执行,返回TRUE,否则返回FALSE。

    BOOL word_save(FILE * fp_wr, List L)

    {

    if (fseek(fp_wr, 0L, SEEK_SET))

    return FALSE;

    for (struct Node * p = L; p; p = p->next)

    fprintf(fp_wr, "%s", p->word.str);

    return TRUE;

    }

    // 程序功能:以文件为单位,执行单词替换

    // 参数格式:命令 源文件 目标文件 查找的单词 替换的单词

    int main(int argc, const char *argv[])

    {

    // 参数合法性检查

    if (argc != 5 || strcmp(argv[1], argv[2]) == 0 ||

    strlen(argv[3]) > MAX_WORDS_LEN || strlen(argv[4]) > MAX_WORDS_LEN)

    complain("参数错误!\n"

    "参数格式:命令 源文件 目标文件 查找的单词 替换的单词");

    FILE *fin = fopen(argv[1], "rt");

    FILE *fout = fopen(argv[2], "wt");

    const char *const fnd = argv[3];

    const char *const rep = argv[4];

    if (fin == NULL || fout == NULL)

    complain("文件输入输出错误!\n");

    List L = NULL; // 不带头结点的单向链表的表头指针

    if (word_parse(fin, &L) == FALSE)

    complain("Parse error.");

    print_list(L);

    int rep_cnt = word_replace(L, MATCH_WORD_CASE, fnd, rep);

    printf("共发生替换 %d 次。\n", rep_cnt);

    word_save(fout, L);

    dump_list(L);

    fclose(fin);

    fclose(fout);

    return 0;

    }

    展开全文
  • 在Python中替换文件中的特定字符串

    千次阅读 2021-01-13 16:38:10
    首先,因为我以前被一个有电的...在总之,我有一个文本文件,如下所示:##### File section 1####1.0 abc Description16.5 def Description21.0 2.0 3.0 ghi Description311 jkl Description##### File section 2###...

    首先,因为我以前被一个有电的人烫伤过,所以这个问题不是家庭作业。在

    总之,我有一个文本文件,如下所示:####

    # File section 1

    ####

    1.0 abc Description1

    6.5 def Description2

    1.0 2.0 3.0 ghi Description3

    11 jkl Description

    ####

    # File section 2

    ####

    1.0 abc Description1

    12.5 def Description2

    1.0 2.0 3.0 ghi Description3

    11 jkl Description

    #### End file

    我想替换两行中的字符串“1.0”:

    ^{pr2}$

    但是,不是行中的“1.0”字符串:1.0 2.0 3.0 ghi Description3

    我使用的当前代码是:with open('sample_file.txt','r') as file:

    filedata = file.read()

    filedata = filedata.replace('1.0','2.0')

    with open('sample_file.txt','w') as file:

    file.write(filedata)

    但是结果是所有出现的“1.0”都会被替换。然后我要回到文件中,纠正错误。我想要得到的结果文件是:####

    # File section 1

    ####

    2.0 abc Description1

    6.5 def Description2

    1.0 2.0 3.0 ghi Description3

    11 jkl Description

    ####

    # File section 2

    ####

    2.0 abc Description1

    12.5 def Description2

    1.0 2.0 3.0 ghi Description3

    11 jkl Description

    #### End file

    我怎么能得到那个?我找不到解决这类问题的范例。谢谢你们的帮助。在

    编辑:我的错误是没有澄清,但我要替换的字符串并不总是“1.0”,也不总是3个字符长。例如可以是“-12.3”。我想让代码尽可能通用。在

    我还尝试使用rsplit将空格作为分隔符来隔离第一个字符串,但这似乎不适用于文件写入。在

    =========================

    编辑2:我找到了一个方法,虽然这似乎是一个相当全面的方法:with open('sample_file.txt','r') as file:

    filedata = file.readlines()

    for line in filedata:

    if 'abc' in line:

    oriline = line

    newline = line.replace(str(spk),str(newspk))

    with open('sample_file.txt','r') as file:

    filedata = file.read()

    filedata = filedata.replace(str(oriline),str(newline))

    with open('sample_file.txt','w') as file:

    file.write(filedata)

    基本上,它将打开文件,逐行读取包含我想要的特定字符串的整行,然后将其存储到内存中。然后再次打开文件,读取所有内容,然后替换整个字符串。然后打开文件,并写入该文件。在

    它做了我想要的,但是有没有一种方法可以简化代码呢?在

    展开全文
  • 将当前文件夹的所有文件中的.online替换为.cn sed -i "s/.online/.cn/g" *

    将当前文件夹的所有文件中的.online替换为.cn

    sed -i "s/.online/.cn/g"  *
    
    展开全文
  • 背景网上实现文件内容替换的方法大多都是先生成一个temp临时文件,然后读取原文件的内容进行替换过后再写入到temp临时...解决方案首先我们创建一个文件a.txt:新建文件我们下面编写程序对an字符串进行替换,就用@来...

    背景

    网上实现文件内容替换的方法大多都是先生成一个temp临时文件,然后读取原文件的内容进行替换过后再写入到temp临时文件,然后再删除原文件或者其他方法,这种生成临时文件的方法虽然能够将功能实现,但是进行文件的操作过多,而且还要生成一个文件,比较麻烦,今天就利用移动文件指针的方式对匹配的文件内容进行替换。

    解决方案

    首先我们创建一个文件a.txt:

    b64f778b3710

    新建文件

    我们下面编写程序对an字符串进行替换,就用@来替换吧,那么首先定义一些变量

    //变量定义

    char buffer[MAX_LENGTH];

    int fp_start = 0; //记录文件指针起始

    int fp_end = 0; //记录文件指针末尾

    int buffer_length = 0;

    int move_length = 0;

    FILE *fp = fopen(argv[1],"r+"); //使用命令行参数打开文件位置

    然后我们按行读取文件内容

    if(fgets(buffer, MAX_LENGTH, fp) == NULL)

    {

    break;

    }

    else

    {

    buffer_length = strlen(buffer);

    for(int j = 0; j < buffer_length; j++)

    {

    if(strncmp(argv[2], &buffer[j], strlen(argv[2])) == 0) //进行字符串匹配

    {

    fp_end = ftell(fp);

    move_length = buffer_length - j;

    fseek(fp, -(move_length+1), SEEK_CUR); //移动文件指针

    fp_start = ftell(fp);

    for(int i=0; i < strlen(argv[2]); i++) //替换操作

    {

    fputc('@',fp);

    }

    fseek(fp,fp_end,SEEK_SET);

    }

    }

    }

    我们使用strncmp进行字符串匹配,需要注意的是我们使用fgets进行按行读取,那么文件指针应该在每一行的尾部,当扫描到了匹配的字符串时就需要将文件指正向前移动到匹配处,然后进行覆盖指定的长度,也就是匹配字符串的长度,最后再将文件指针放回原来的位置,继续匹配。

    程序执行效果

    我们之前创建了一个a.txt的文件,那么我们就将文件中的所有的an字符串替换为@符号,程序命令行执行:

    b64f778b3710

    b64f778b3710

    可以看到所有的an都被替换成了@,程序执行成功!

    源码

    #include

    #include

    #include

    #define MAX_LENGTH 4096

    int main(int argc, char *argv[])

    {

    //变量定义

    char buffer[MAX_LENGTH];

    int fp_start = 0; //记录文件指针起始

    int fp_end = 0; //记录文件指针末尾

    int buffer_length = 0;

    int move_length = 0;

    FILE *fp = fopen(argv[1],"r+"); //使用命令行参数打开文件位置

    if(fp == NULL)

    {

    printf("File open failed\n");

    return 0;

    }

    while (1)

    {

    memset(buffer, 0, MAX_LENGTH);

    if(fgets(buffer, MAX_LENGTH, fp) == NULL)

    {

    break;

    }

    else

    {

    buffer_length = strlen(buffer);

    for(int j = 0; j < buffer_length; j++)

    {

    if(strncmp(argv[2], &buffer[j], strlen(argv[2])) == 0)

    {

    fp_end = ftell(fp);

    move_length = buffer_length - j;

    fseek(fp, -(move_length+1), SEEK_CUR);

    fp_start = ftell(fp);

    for(int i=0; i < strlen(argv[2]); i++)

    {

    fputc('@',fp);

    }

    fseek(fp,fp_end,SEEK_SET);

    }

    }

    }

    }

    printf("Success!\n");

    fclose(fp);

    return 0;

    }

    展开全文
  • 现在,由于此电子邮件的格式可能会发生变化,因此我决定使用模板html页面作为电子邮件,其中包含需要替换的自定义标记,例如%fullname%....使用密钥作为标记标识符以及需要替换它的值.我尝试过以下方法:$fp = ...
  • 使用bat替换文件中字符串

    千次阅读 2021-01-08 14:02:27
    使用bat替换文件中指定字符串(不用循环) @echo off rem delims为字符串 eol=# 忽略以#开头的行 tokens=1-10* 从第1组到10* rem 括号里填写你要替换的文件 (for /f "delims=" %%a in (a.txt) do ( rem 将一个值赋...
  • 当你在使用文本文件时,很可能需要查找和替换文件中字符串。sed 命令主要用于替换一个文件的文本。在 Linux 这可以通过使用 sed 命令和 awk 命令来完成。 一 sed 命令是什么 sed 命令表示 Stream Editor(流...
  • 中文替换spa注意:短字符串替换成长字符串要注意内存越界.net函数代码/* 功 能:将str字符串中的oldstr字符串替换为newstr字符串* 参 数:str:操做目标 oldstr:被替换者 newstr:替换者* 返回值:返回替换以后的...
  • } } /** * 替换文件中字符串 * * @param filePath * @param oldStr * @param replaceStr */ public static void replaceTxtByStr(String filePath, String oldStr, String replaceStr) { String temp = "";...
  • GDB调试汇编分析GDB调试汇编分析 代码 本次实践我参照了许多先做了的同学的博客,有卢肖明,高其,张梓靖同学.代码借用的是卢肖明同学的代码进行调试运行....)angularJs学习- 1.刷新当前页面数据:$...
  • @echo off set client_config=path\to\client_config.ini (for /f "delims=" %%a in (%client_config%) do ( set "str=%%a" setlocal enabledelayedexpansion set "str=!str:origin_str=new_str!...
  • sed -i "s/原字符串/目标字符串/g" `grep 原字符串 -rl 需要批量替换文件或文件夹目录` 如:在当前目录将原字符串"suffx"(也可以是子串)批量替换字符串"_kind",如下一行命令即可实现批量替换 sed -i "s/...
  • js中如何将一个字符串中的;替换成,例如: var a = "23;28"; 将其替换成"23,28"js中个字符串中指定内容可以用replace函数来实现。新建html文件,添加body...oracle中替换字段中指定字符串的语句比如表tab1有个字段...
  • 我正在使用gulp uglify并准备好我的javascript文件进行制作.我所拥有的是这段代码:var concat = require('gulp-concat');var del = require('del');var gulp = require('gulp');var gzip = require('gulp-gzip');var...
  • python怎么把字符串第一个字符去掉比如我输入C69.6 ...Python如何替换字符串里的第N个字符哈哈,选我吧。defpuzzle(str1,str2,letter): idx=N-1 ifidx=len(str1)oridx>=len(str2): returnNone ifstr1[idx]==let...
  • [经常碰到朋友,尤其是初学者对指定文件夹下指定类型文件的读取很困惑,这里,我把自己经常用的程序贴出来,供初学者学些;#include stdafx.h#include windows.h#include #应用场景:比如有一个深层次的文件目录结构...
  • 一种是Mahuinan法,一种是Sumly法,一种是30T法分别如下:一、Mahuinan法:用sed命令可以批量替换多个文件中字符串。语法:sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl所在目录`例如:我要把mahuinan替换...
  • C语言替换字符串

    2021-05-22 07:51:48
    #include #include #include /**** @author: cnscn@163.com* @reference: lovesnow1314@http://community.csdn.net/Expert/TopicView3.asp?id=5198221** 用新子串newstr替换字符串src的前len个字符内所包含的...
  • 原标题:使用 sed 命令查找和替换文件中字符串的 16 个示例 | Linux 中国 sed 命令主要用于替换一个文件的文本。-- Magesh Maruthamuthu当你在使用文本文件时,很可能需要查找和替换文件中字符串。 命令主要...
  • 假设有文件test.txt,想把test.txt文件第三列含有的good替换为bye,并把替换后的文件保存为test_bye.txt,只需要如下命令。test.txtgo go good gomy my go goodbye my good byetest_bye.txtgo go bye gomy my go ...
  • 1、Vi编辑器替换vi/vim 可以使用 :s 命令来替换字符串。:s/error/wrong/:替换当前行第一个error为wrong;:s/error/wrong/g:替换当前行所有error为wrong;:n,$s/error/wrong/:替换第n行开始到最后一行每一行的...
  • 一、Linux sed 批量替换多个文件中的字符串 sed -i “s/oldstring/newstring/g” grep oldstring -rl datadir ...二、批量删除指定字符串的行 sed -e '/test/d' test.txt // 删除test.txt含"test"的行,但不改变test
  • 可以复习一下xargs的用法,和变量的一些高级操作技巧如何批量把若干文件从一个扩展名改为另一个扩展名?比如把后缀gz,改为zip答:1.for file in *.gz; do mv $file `basename $file .gz`.zip; done或(也适合ksh)for...
  • 1、将当前目录下包含hello串的文件中,1字符串替换为2 sed -i 's/1/2/g' `grep "1" -rl ./` 2、将某个文件中的hello字符串替换为hi sed -i "s/1/2/g" test.txt 3、删除行首空格 sed -i 's/^ //g' test.txt 4、...
  • 替换docx文件里面的 ${} 字符串public class Main {public static void main(String[] args) throws Exception {String template = "C:\\Users\\lzh\\Desktop\\模板.docx";String outSrc = "C:\\Users\\lzh\\Desktop...
  • 话题相关#linux 文件替换字符串#sed 字符串替换#shell 文件替换某行#linux 替换指定行内容#linux 替换某行linux一般用sed来替换文本到指定行。基本语法s (substitute)为查找替换命令# 在输出或打印替换字符串...
  • 应用场景:比方有一个深层次的文件目录结构,如:javaAPI每一个文件中面都有同样的内容,而我们要统一改动为其它内容。上千个文件假设一个个改动显得太不明智。import java.io.BufferedReader;import java.io.File;...
  • 尝试在python对文本文件的内容使用通配符进行搜索/替换:如果文本文件的内容看起来像:"all_bcar_v0038.ma";"all_bcar_v0002.ma";"all_bcar_v0011.ma";"all_bcar_v0011.ma";希望用v1000替换所有版本号以获得以下...
  • python替换字符串中的某个字符

    千次阅读 2020-12-24 00:24:45
    python_split_strip_replace使用方法使用python时会经常要对字符串做一些处理,比如:分割字符串、去掉空格、替换字符串中的某个字符等,下面介绍下这几个功能的使用。一、Split()作用:将字符串分割成为列表,不...
  • 我正在使用“loadDataWithBaseUrl...如何动态替换字符串,以便它可以本地化?请帮我解决这个问题.解决方法:我能想到各种解决方案:>根据当前语言加载不同的资产文件(使用Locale.getDefault()获取当前语言),这样...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 353,709
精华内容 141,483
关键字:

替换文件中指定字符串