gnuplot: пробелы в пути к файлу
Насколько правильно вы можете использовать имена файлов с пробелами?
Мой код:
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 / мои данные /data1.csv - все правильно
d:/data/my data/data 2.csv - ошибка, файл 0 размера "data.png" создан, а график не создан
Как решить эту проблему?
2 ответа
В основном вам нужно заменить "\n"
с space
и поместите ваши имена файлов в кавычки ''
, Следующий код может быть одним из способов сделать это. Кстати, ваш код будет генерировать выходные имена, такие как "Data1.dat.png", а не "Data1.png" из "Data1.csv". Также следует помнить о разнице одинарных и двойных кавычек.
### 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
Нашел проблему:
команда do for [name in files]
разбивает список имен файлов на слова (пробел как разделитель), а не на строки (\r\n как разделитель)
Поэтому необходимо выбирать строки из списка, а не слова.