gnuplot:文件路径中的空格

时间:2019-01-19 13:41:25

标签: file gnuplot whitespace gnuplot-iostream

如何正确使用带空格的文件名?

我的代码:

files = system("dir /b \"d:\\data\\my data\\*.dat\"")

do for [name in files]{

    inputPath = "d:/data/my data/".name
    outputPath = "d:/data/".name.".png"

    set output outputPath
    plot inputPath using 1:3 with lines ls 1 notitle
}

如果文件名中包含空格,则脚本无法正常运行。 例如:

d:/ data / my data / data1.csv-全部正确

d:/ data / my data / data 2.csv-错误,已创建大小为0的文件“ data.png”,但未创建图形

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

发现问题

命令do for [name in files]将文件名列表分为单词(空格作为分隔符),而不是行(\ r \ n作为分隔符)

因此,有必要从列表中选择字符串,而不是单词。

答案 1 :(得分:1)

基本上,您需要将"\n"替换为space,并将文件名放在引号''中。 以下代码可能是执行此操作的一种方法。 顺便说一句,您的代码将从“ Data1.csv”生成输出名称,例如“ Data1.dat.png”,而不是“ Data1.png”。另外请注意单引号和双引号的区别。

### File list with space in filenames (Windows)
reset session

InputPath = 'D:\data\my data\'
OutputPath = 'D:\data\'
SearchExp = 'dir /b "' . InputPath . '*.dat"'
# print SearchExp
LIST = system(SearchExp)
# print LIST

LIST = LIST eq "" ? LIST : "'".LIST."'"  # add ' at begining and end
FILES = ""
do for [i=1:strlen(LIST)] {
    FILES = (LIST[i:i] eq "\n") ? FILES."' '" : FILES.LIST[i:i]
}
# print FILES
print sprintf("The list contains %d files", words(FILES))

do for [FILE in FILES] {
    InputFile = InputPath.FILE
    OutputFile = OutputPath.FILE[1:strlen(FILE)-4].".png"
    print InputFile
    print OutputFile
    # or plot your files 
}
### end of code