VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 36|回复: 7

如何一次从文件中读入一行

[复制链接]

1

主题

4

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2020-1-6 13:40:01 | 显示全部楼层 |阅读模式
文件是shell可执行脚本。
要求读入的数据符合shell解释规则。
比如:
aaa \
bbb
那么读入的行应该是 aaa bbb
回复

使用道具 举报

0

主题

18

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2020-1-6 17:27:01 | 显示全部楼层
不懂楼主意思
回复

使用道具 举报

1

主题

4

帖子

4

积分

新手上路

Rank: 1

积分
4
 楼主| 发表于 2020-1-6 18:12:01 | 显示全部楼层
不懂楼主意思
-------------
举个例子
对于shell脚本,如果一行的末尾是 \
那么表示该行还未结束。
回复

使用道具 举报

0

主题

13

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2020-1-7 01:45:01 | 显示全部楼层
你自己的解释已经定义好了程序的逻辑。实现起来不难,像perl这样的脚本语言可以按行读,很容易处理你的要求。
如果是C语言,简单的办法是一次把文件读到内存,用几个指针就可以处理了。大致的代码如下(注意程序并未调试,可能有错误):
char* buffer;
int filelen;
char* buffer_end = buffer + filelen;
buffer = (char*)malloc(filelen);
/* read file data to buffer*/

char* line_start;
char* line_end;
char line_buffer[1024]; /* maximum line length is 1024 */

line_end = line_start;

while(line_end < buffer_end) {
  int line_offset = 0;
  line_start = line_end;
  while(line_end != '\n') line_end++;
  if(line_end >= buffer_end ) break;
  if (line_end 之前最后字符是'\') {
    strncpy(line_buffer + line_offset, line_start, line_end - line_start);
    line_offset += line_end - line_start;  // 此处判断是否超过line_buffer大小
  }else {
    处理line_buffer并清空
    strncpy(line_buffer + line_offset, line_start, line_end - line_start);
  }
}
回复

使用道具 举报

1

主题

4

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2020-4-13 23:45:01 | 显示全部楼层
fgets
回复

使用道具 举报

1

主题

4

帖子

4

积分

新手上路

Rank: 1

积分
4
 楼主| 发表于 2020-7-15 14:15:01 | 显示全部楼层
\\表示\
\作为转义符


程序可以用c++,stl
只要知道\转义的所有情况,要写程序不难。
但是测试就麻烦了。是一大工作
有现成的程序最好。
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2020-7-17 20:30:01 | 显示全部楼层
明确了自己的需求,没有实现不了的。
回复

使用道具 举报

1

主题

4

帖子

4

积分

新手上路

Rank: 1

积分
4
 楼主| 发表于 2020-7-28 12:15:01 | 显示全部楼层
明确了自己的需求,没有实现不了的。
------------
要看代价。我们要自己做OS吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2020|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表