gpt4 book ai didi

c - 解析文本文件( Unresolved 问题)

转载 作者:太空宇宙 更新时间:2023-11-04 05:48:37 25 4
gpt4 key购买 nike

这是一个我认为已经解决的问题,但显然我仍然到处都是小错误。下面的代码是我用来解析文本文件的代码,它使用我正在为原型(prototype)微 Controller 开发的制作语言。基本上,每当遇到分号时,我都会将之后的任何文本视为注释并忽略它:

   `//Get characters from .j FILE`
while (fgets(line, 1000, IN) != NULL)
{
//Get each line of .j file


//Compute length of each line
len = strlen(line);

//If length is zero or if there is newline escape sequnce
if (len > 0 && line[len-1] == '\n')
{
//Replace with null
line[len-1] = '\0';
}

//Search for semicolons in .J FILE
semi_token = strpbrk(line, ";\r\n\t");

//Replace with null terminator
if (semi_token)
{
*semi_token = '\0';
}
printf("line is %s\n",line );

//Copy each line
assign = line;

// printf("line is %s\n",line );

// len = strlen(line);

// printf("line length is %d\n",len );

// parse_tok = strtok(line, "\r ");

}

上面的代码是从文本文件中获取每一行的 while 循环。如果我有以下格式的文件,一切正常:

;;
;; Basic
;;

defun test arg3 arg2 arg1 min return
;defun love arg2 arg1 * return
;defun func_1 6 6 eq return
;defun func_2 20 100 / return

defun main
0 -200 55 test printnum endl
;1 2 3 test printnum endl
;38 23 8 test printnum endl
;5 6 7 love printnum endl
;love printnum endl
;func_1 printnum endl
;func_2 printnum endl
return

观察输出:

line is 
line is
line is
line is
line is defun test arg3 arg2 arg1 min return
line is
line is
line is
line is
line is defun main
line is 0 -200 55 test printnum endl
line is
line is
line is
line is
line is
line is
line is return

问题在于当我的文本文件在有嵌套语句的情况下有制表符时:

;;
;; program to test nested ifs
;;

defun testIfs ;; called with one parameter n

arg1 ; get n to the top of the stack

dup 16 gt
if ; 16 > n

dup 8 gt
if ; 8 > n

dup 4 gt
if ; 4 > n
0
else ; 4 <= n
1
endif

else ; 8 <= n
2
endif

else ; 16 <= n

dup 24 gt
if ; 24 > n

dup 20 gt
if ; 20 > n
3
else ; 20 <= n
4
endif

else ; 24 <= n

dup 32 gt
if ; 32 > n
5
else
-10
endif

endif

endif

return


defun main
5 testIfs printnum endl
11 testIfs printnum endl
28 testIfs printnum endl
35 testIfs printnum endl
return

观察输出:

line is 
line is
line is
line is
line is defun testIfs
line is
line is arg1
line is
line is dup 16 gt
line is if
line is
line is dup 8 gt
line is if
line is
line is
line is
line is
line is
line is
line is
line is
line is else
line is 2
line is endif
line is
line is else
line is
line is dup 24 gt
line is if
line is
line is
line is
line is 3
line is else
line is 4
line is
line is
line is else
line is
line is dup 32 gt
line is if
line is 5
line is
line is
line is endif
line is
line is endif
line is
line is endif
line is
line is return
line is
line is
line is defun main
line is 5 testIfs printnum endl
line is 11 testIfs printnum endl
line is 28 testIfs printnum endl
line is 35 testIfs printnum endl
line is return

如您所见,它会跳过(看似随机地)某些带标签的行,我不知道为什么要这样做。需要在我的代码中修改什么,以便它不会随机跳过某些带标签的行?感谢您的帮助!

最佳答案

这是查找分号的部分:

    //Search for semicolons in .J FILE
semi_token = strpbrk(line, ";\r\n\t");

它明确地将制表符视为与分号相同,即开始评论。至于为什么这个错误并不总是发生 - 我猜有时你的编辑器会将 *.J 输入文件中的制表符 (\t) 转换为空格。

关于c - 解析文本文件( Unresolved 问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51467310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com