我有一个fstream my_file("test.txt"),但我不知道test.txt是否存在.如果它存在,我想知道我是否也可以阅读它.怎么做?
我用的是Linux.
如何编译(Haskell)程序以便它不需要DLL?
我写了一个使用GLUT并需要glut32.dll的程序.我编译了它ghc --make program.hs.现在我想分发我的程序,但我不希望它需要任何DLL(因此我可以将.exe提供给用户).我尝试编译,ghc -static --make program.hs但它没有工作,我仍然得到"用户错误(未知的GLUT条目glutInit)".
我怎样才能做到这一点?
我有一个字符串,我想检查它是否以某个字符开头(在这种情况下为#).我想知道最有效的方法!
我正在考虑的是if {[string compare -length 1 $string "#"]},因为它可能使用strcmp(),这可能是实现这一目标的最快方法之一.
我认为也可能是if {[string index $string 1] == "#"},因为它可能会*string =='#',这可能也会非常快.
你怎么看?
基本上,我有一个由多个空格分隔的单词组成的字符串.然而,事情是,可以有多个空格而不是只有一个分隔单词.这就是为什么[split]不做我想要的:
split "a b"
Run Code Online (Sandbox Code Playgroud)
给我这个:
{a {} {} {} b}
Run Code Online (Sandbox Code Playgroud)
而不是这个:
{a b}
Run Code Online (Sandbox Code Playgroud)
在搜索Google时,我在Tcler的wiki上找到了一个页面,用户在那里提出了大致相同的问题.
一个建议的解决方案看起来像这样:
split [regsub -all {\s+} "a b" " "]
Run Code Online (Sandbox Code Playgroud)
这似乎适用于简单的字符串.但是测试字符串如[string repeat " " 4](使用字符串重复,因为StackOverflow剥离多个空格)将导致regsub返回"",这split将再次分成{{} {}}而不是空列表.
另一个提议的解决方案是这个,强制重新解释给定字符串作为列表:
lreplace "a list with many spaces" 0 -1
Run Code Online (Sandbox Code Playgroud)
但是,如果有一件事我已经了解了TCL,那就是你永远不应该l在字符串上使用列表函数(以...开头).事实上,这个会阻塞包含特殊字符的字符串(即{和}):
lreplace "test \{a b\}"
Run Code Online (Sandbox Code Playgroud)
返回test {a b}而不是test \{a b\}(这将是我想要的,每个以空格分隔的单词分成结果列表的单个元素).
另一种解决方案是使用"过滤器":
proc filter {cond list} {
set res {}
foreach element $list …Run Code Online (Sandbox Code Playgroud) 程序应如何处理错误?例:
程序需要该文件text.txt.它必须存在并且是可写的.如果它不可写或不存在应该怎么办?它应该尝试chown/chmod文件吗?它应该尝试创建它还是只显示错误消息?
或者:它应该尝试找到解决方案还是只显示错误消息?