朱莉娅:比较字符串和特殊字符

use*_*234 3 string julia

我需要读取一个文本文件,其中包含csv分隔各个数据块的标题的数据.标题始终以美元符号开头$.所以我的文本文件看起来像:

$Header1
2
1,2,3,4
2,4,5,8
$Header2
2
1,1,0,19,9,8
2,1,0,18,8,7
Run Code Online (Sandbox Code Playgroud)

我想要做的是,如果程序到达$Header2,我想读取它后面的所有下一行,直到它到达,比如说$Header3或结束文件.我想我可以在Julia中使用`cmp'.我尝试使用包含以下文本的小文件:

# file julia.txt
Julia
$Julia
Run Code Online (Sandbox Code Playgroud)

我的代码是:

# test.jl
fname = "julia.txt"
# set some string values
str1 ="Julia";
str2 ="\$Julia";
# print the strings and check the length
println(length(str1),",",str1);
println(length(str2),",",str2);
# now read the text file to check if you are able to find the strings
# str1 and str2 above
println ("Reading file...");
for ln in eachline(fname)
 println(length(ln),",",ln);
 if (cmp(str1,ln)==0)
  println("Julia match")
 end
 if (cmp(str2,ln)==0)
  println("\$Julia match")
 end
end
Run Code Online (Sandbox Code Playgroud)

我从上面的代码得到的输出是:

5,Julia
6,$Julia
Reading file...
6,Julia

7,$Julia
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我从文件中读取Julia字符串的字符长度为6,字符串的字符长度为7 $Julia.我通过打开空格来检查文本文件,但没有.我究竟做错了什么?

tim*_*tim 5

问题是返回的字符串eachline在末尾包含换行符.

您可以使用chomp它删除它:

julia> first(eachline("julia.txt"))
"Julia\n"

julia> chomp(first(eachline("julia.txt")))
"Julia"
Run Code Online (Sandbox Code Playgroud)

此外,您可以简单地使用==而不是cmp测试两个字符串是否相等.两者都使用a ccall,memcmp==只对相同长度的字符串执行此操作,因此可能更快.