string - Julia:比较带有特殊字符的字符串

标签 string julia

我需要读取一个包含 csv 数据的文本文件,其中的标题分隔各个数据 block 。 header 始终以美元符号 $ 开头。所以我的文本文件如下所示:

$Header1
2
1,2,3,4
2,4,5,8
$Header2
2
1,1,0,19,9,8
2,1,0,18,8,7

我想要做的是,如果程序到达 $Header2,我想读取其后面的所有下一行,直到到达 $Header3 或文件末尾。我想我可以在 Julia 中使用“cmp”来实现这一点。我尝试使用包含以下文本的小文件:

# file julia.txt
Julia
$Julia

我的代码如下:

# 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

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

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

7,$Julia

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

最佳答案

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

您可以使用chomp删除它:

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

julia> chomp(first(eachline("julia.txt")))
"Julia"

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

关于string - Julia:比较带有特殊字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43635043/

相关文章:

javascript - 删除 jQuery.trim() 忽略的文本区域中的空白

python - 如何在python中获取文本字符串的视觉长度

julia - 如何在 Julia 中获得滚动窗口回归

dataframe - 在 Julia DataFrame 的堆栈函数中将measure_vars 放在id_vars 之前的原因是什么?

linux - bash 而字符串不为空

regex - 如果文本只包含一次字符串,则匹配该文本的正则表达式

multithreading - 在 Julia 的多线程循环中设置种子

statistics - 如何在 Julia Distributions.jl 中的 MixtureModel 中指定权重?

macros - 可以使用 Julia 宏来生成基于特定功能实现的代码吗?

python - 查找字符串中某个字符的所有出现