2011-05-10 69 views
0

我目前在一个txt文件中有几百个文件路径需要strim,在文本文件中划线(Windows)

report2011510222820.html: <td width="60%" bgcolor="#f4f4f4" class="tablebody" valign="top">C:\Users\Administrator\Desktop\calc.exe</td> 

我怎么能拿出 “report2011510222820.html: &lt;td width="60%" bgcolor="#f4f4f4" class="tablebody" valign="top"&gt;" and "&lt;/td&gt;”,所以我只留下了:

C:\Users\Administrator\Desktop\calc.exe 

当前的代码,我有:

#include <stdio.h> 
#include <string.h> 
int main(int argc, char *argv[]) 
{ 
    char s[2048]; 
    while (fgets(s, sizeof(s), stdin)) 
    { 
     char *pos = strpbrk(s, "|\r\n"); 
     if (pos != 0) 
      fputs(pos+1, stdout); 
    } 
    return 0; 
} 
+0

'的#include 的#include INT主(INT的argc,字符* argv的[]){ 炭 S [2048]; (fgets(s,sizeof(s),stdin)) char * pos = strpbrk(s,“| \ r \ n”);如果(pos!= 0) fputs(pos + 1,stdout); } return 0; } ' – Den 2011-05-10 23:13:53

+0

这就是我现在的代码 – Den 2011-05-10 23:14:18

+0

@pavium嗨,我认为有人为我编辑过 – Den 2011-05-10 23:24:56

回答

0

为了让您发布的代码工作在给出的例子中,可以做出以下改变。

更改strpbrk调用检查角钢支架代替竖线(不知道这只是在操作码输入错误或不):

char *pos = strpbrk(s, ">\r\n"); 

,然后更改if (pos != 0)声明下列。它在下一个尖括号处截断字符串的结尾。

if (pos != 0) 
    { 
    char *end = strrchr(pos, '<'); 
    if (end) 
     *end = '\0'; 
    printf("%s\n", pos + 1); 
    } 

虽然结果相当脆弱。但取决于输入和期望的用途,也许它是好的。

+0

@Mark Wilkins嗨,只是尝试过,它似乎不适用于多行,只有在文本文件中只有一行:( – Den 2011-05-10 23:55:16

+0

@Den:我只试过它与文件中的示例行,它的工作。您的文件是否包含Unicode字符?如果是这样,您需要使用fgetws和其他适当的功能 – 2011-05-10 23:58:46

+0

不,这很奇怪,因为即使使用非常相似的文件路径,它仍然只输出其中一个:S – Den 2011-05-11 00:05:22