gnuplot: пробелы в пути к файлу - PullRequest
0 голосов
/ 19 января 2019

Насколько правильно вы можете использовать имена файлов с пробелами?

Мой код:

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 голосов
/ 20 января 2019

Как правило, вам нужно заменить "\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
0 голосов
/ 19 января 2019

Найдена проблема:

команда do for [name in files] разбивает список имен файлов на слова (пробел как разделитель), а не на строки (\ r \ n как разделитель)

Следовательно, необходимо выбирать строки из списка, а не слова.

...