Axian86 发表于 2019-7-4 22:17

麻烦大神帮忙编写一个整理文本文档的脚本或程序,谢谢!

需要整理的文本及过程如下:
9011 L:901=0,901-1W=0 !
9011 H:901=0,901-1W=1,901-2W=1,1B-1D=0,1B-2D=0,10IM-D=0,901-D=0,14126=0 !2:901=0 !

在文本中进行逐行搜索,搜索到!2: 这三个字符的时候,在2前进行回车换行,然后在2前面自动插入L或者H前的数字编号。 怕表述不清楚,截了2个图片供大神参考,麻烦大神帮忙写个自动整理的脚本程序,谢谢!

示例:整理前的文本


整理后的文本:

52pojieggh 发表于 2019-7-4 22:33

御花猫 发表于 2019-7-4 22:45

收藏,明天试下shell脚本

Homely 发表于 2019-7-5 00:22



就用了一个精益模块其他均是自带的,模块+源码下面有。看得懂自己改一下就行了很简单的


下载地址
https://www.lanzouj.com/i4uf25g
密码:52pj

橘冬 发表于 2019-7-5 00:37

@Mahone ~]# sed -i '/!.*!$/s/\(^\+[[:space:]]\+\).*!2/&\n\12/'p <文件名字>
# sed -i 's/\(.*\)$/\1/' <文件名字>

楼主试试我这个

kge369 发表于 2019-7-5 11:30

原文件是1.txt   新文件是2.txt

with open('2.txt','w+') as f1:
      pass
with open("1.txt",'r+') as f:
    lines = f.readlines()
    for line in lines:
      with open("2.txt",'a+') as f2:
            #每行line来判断url.find("!2:") > 0:,然后写入新文件
            if line.find("!2:") > 0:
                s = line.find("!2:") #找到该字段所在位置s
                end = line   #代表是2:之后的字符串(每行)
                first = line[:s+1]   #代表!号之前的字符串(每行)
                head = line.split(" ") #对当前行进行空格split,得出首字符串
                #写入文件
                f2.write(first + "\n" + head + " "+ end )
            else:
                #不匹配到就直接写
                f2.write(line)
print("done")

运行前后

cosct 发表于 2019-7-5 12:18

源文件为read.txt,处理后文件为write.txt(每行字符数不能超过1024个)

#include <stdio.h>
#include <string.h>

#define _CRT_SECURE_NO_WARNINGS
#pragma warning (disable: 4996)

int main()
{
    FILE* fp;
    FILE* fd;
    char rowNum;
    char buf;
    char newbuf;
    int i;

    //读取文件
    fp = fopen("read.txt", "r");
    if (fp == NULL)
    {
      printf("文件读取失败\n");
      return -1;
    }
    else
    {
      printf("正在读取文件...\n");
    }

    //写入文件
    fd = fopen("write.txt", "w");
    if (fd == NULL)
    {
      printf("写入文件打开失败\n");
      return -2;
    }
    else
    {
      printf("正在写入文件...\n");
    }

    //读取每一行
    while (fgets(buf, sizeof(buf), fp) != NULL)
    {

      //读取行号
      strncpy(rowNum, buf, 4);
      rowNum = '\0';

      //判断是否要换行
      for (i = 5; buf != '\0'; i++)
      {
            if (buf == '!' && buf == '2' && buf == ':')
                break;
      }

      if (buf != '\0')
      {
            strncpy(newbuf, buf, i + 1);
            newbuf = '\n';
            newbuf = '\0';
            strcat(newbuf, rowNum);
            strcat(newbuf, " ");
            strcat(newbuf, buf + i + 1);

            fputs(newbuf, fd);
      }
      else
      {
            fputs(buf, fd);
      }

      //清空buf
      memset(buf, 0, sizeof(buf));
    }

    //关闭
    fclose(fp);
    fclose(fd);

    return 0;
}

源码及程序(win64):
链接: https://pan.baidu.com/s/1SilvekavrhzW2i6Rxdmmjw 提取码: 4d4b

Axian86 发表于 2019-7-5 12:29

kge369 发表于 2019-7-5 11:30
原文件是1.txt   新文件是2.txt

with open('2.txt','w+') as f1:


小白问一下,这个python代码是怎么用的?

kge369 发表于 2019-7-5 12:33

Axian86 发表于 2019-7-5 12:29
小白问一下,这个python代码是怎么用的?

下午我打包成exe文件再发上来,

代码就是安装python环境,直接用源码运行,用源码可以按照自己的需求随便修改!

但是打包成exe就固定了,就不能随便修改了

Axian86 发表于 2019-7-5 16:01

kge369 发表于 2019-7-5 12:33
下午我打包成exe文件再发上来,

代码就是安装python环境,直接用源码运行,用源码可以按照自己的需求 ...

那谢谢大神打包exe,我对这个编码之类的是完全不懂,谢谢!
页: [1] 2
查看完整版本: 麻烦大神帮忙编写一个整理文本文档的脚本或程序,谢谢!