使字符串安全以在 Racket 中创建文件
Make string safe for file creation in Racket
我有一个程序,用户可以在其中输入用于创建文件的字符串。我怎样才能确保该字符串对于文件创建是安全的。我想到的一种方法是:
(define (safestr sentstr)
(list->string
(remove*
(list "|" ";" ":" "/" "\" "\'" "\"")
(string->list sentstr) )))
但是不行。
(println (safestr "abcd \ \ d /e / f | ; : d ef "))
"abcd \ \ d /e / f | ; : d ef "
最好的方法是什么?
原因是 string->list
returns 一个字符列表,而不是字符串列表。试试这个:
(define (safestr sentstr)
(list->string
(remove*
(list #\| #\; #\: #\/ #\ #\' #\")
(string->list sentstr) )))
(print (safestr "abcd \ \ d /e / f | ; : d ef "))
;; -> abcd d e f d ef
你可以通过DrRacket的交互性来发现这类东西。例如,您看到您的函数 safestr
没有 returns 预期的结果。然后你就可以开始在交互中尝试你的函数的主要组件了window。因此,在这种情况下,您可以尝试第一次调用该函数:
(string->list "abcd \ \ d /e / f | ; : d ef ")
看看它的结果是什么。它显示如下内容:
'(#\a
#\b
#\c
#\d
#\space
... other lines missing ...
从中您可以立即看出结果是字符列表,而不是字符串列表。
这是 Lisp 语言的 REPL 环境等工具允许的交互式编程风格的本质。
另一个重要且非常有用的工具是调试器:使用它您可以单步执行程序并查看每条语句的效果。只需几步,您就可以找到错误。
总的来说,DrRacket 是一个非常有用的 IDE,我的建议是至少学习它的主要功能,以加快您的程序开发。
你问:
How can I make sure that the string is safe for file creation.
执行此操作的最佳方法是使用内置功能。
特别是函数 absolute-path?
和 relative-path?
将 return #f
如果输入不是合法路径。
我有一个程序,用户可以在其中输入用于创建文件的字符串。我怎样才能确保该字符串对于文件创建是安全的。我想到的一种方法是:
(define (safestr sentstr)
(list->string
(remove*
(list "|" ";" ":" "/" "\" "\'" "\"")
(string->list sentstr) )))
但是不行。
(println (safestr "abcd \ \ d /e / f | ; : d ef "))
"abcd \ \ d /e / f | ; : d ef "
最好的方法是什么?
原因是 string->list
returns 一个字符列表,而不是字符串列表。试试这个:
(define (safestr sentstr)
(list->string
(remove*
(list #\| #\; #\: #\/ #\ #\' #\")
(string->list sentstr) )))
(print (safestr "abcd \ \ d /e / f | ; : d ef "))
;; -> abcd d e f d ef
你可以通过DrRacket的交互性来发现这类东西。例如,您看到您的函数 safestr
没有 returns 预期的结果。然后你就可以开始在交互中尝试你的函数的主要组件了window。因此,在这种情况下,您可以尝试第一次调用该函数:
(string->list "abcd \ \ d /e / f | ; : d ef ")
看看它的结果是什么。它显示如下内容:
'(#\a
#\b
#\c
#\d
#\space
... other lines missing ...
从中您可以立即看出结果是字符列表,而不是字符串列表。
这是 Lisp 语言的 REPL 环境等工具允许的交互式编程风格的本质。
另一个重要且非常有用的工具是调试器:使用它您可以单步执行程序并查看每条语句的效果。只需几步,您就可以找到错误。
总的来说,DrRacket 是一个非常有用的 IDE,我的建议是至少学习它的主要功能,以加快您的程序开发。
你问:
How can I make sure that the string is safe for file creation.
执行此操作的最佳方法是使用内置功能。
特别是函数 absolute-path?
和 relative-path?
将 return #f
如果输入不是合法路径。