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

WaterWalker 2007-01-02 12:05:37
文件是shell可执行脚本。
要求读入的数据符合shell解释规则。
比如:
aaa \
bbb
那么读入的行应该是 aaa bbb
...全文
625 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
WaterWalker 2007-01-08
  • 打赏
  • 举报
回复
明确了自己的需求,没有实现不了的。
------------
要看代价。我们要自己做OS吗?
fzzzf 2007-01-06
  • 打赏
  • 举报
回复
明确了自己的需求,没有实现不了的。
WaterWalker 2007-01-06
  • 打赏
  • 举报
回复
\\表示\
\作为转义符


程序可以用c++,stl
只要知道\转义的所有情况,要写程序不难。
但是测试就麻烦了。是一大工作
有现成的程序最好。
SmallBigCat 2007-01-04
  • 打赏
  • 举报
回复
fgets
huailairen 2007-01-02
  • 打赏
  • 举报
回复
不懂楼主意思
x86 2007-01-02
  • 打赏
  • 举报
回复
你自己的解释已经定义好了程序的逻辑。实现起来不难,像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);
}
}
WaterWalker 2007-01-02
  • 打赏
  • 举报
回复
不懂楼主意思
-------------
举个例子
对于shell脚本,如果一行的末尾是 \
那么表示该行还未结束。

23,115

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧