У меня есть проект, который требует преобразования большого списка файлов .bin в эквивалентный большой список файлов .csv. Скрипт-конвертер уже написан в c компанией Agilent, уловка 22 в том, что скрипт конвертирует только один .bin-файл за раз. но после преобразования он будет в правильном формате для моего проекта
Программа c (называемая agilent_bin_reader. c) работает нормально, когда я набираю аргументы вручную, но когда аргументы приходят из. TXT-файл, то средство открытия файлов не может открыть файл. Я хочу автоматизировать процесс для запуска программы c тысячи раз, поэтому я создал сценарий. sh, который повторяет процесс до EOF одного из текстовых файлов.
Пример, введенный вручную) linux_shell$ ./agilent_bin_reader des_trace1.bin trace1.csv
Прекрасно сохраняет двоичную информацию из des_trace1.bin в trace1.csv.
Моя проблема в том, что я запускаю эту программу c, используя мой скрипт. sh Я получаю ошибку что файл в принципе не удалось открыть. Проблема с этой частью кода c:
inputFile = fopen(argv[1], "rb");
if (inputFile)
, потому что if никогда не оценивается как true. остальное, что следует, в основном выводит меня из кода.
Вот мой сценарий. sh, который я создал:
while
IFS= read -r a1 <&3 &&
IFS= read -r a2 <&4
do
./agilent_bin_reader "$a1" "$a2" 3<&- 4<&-
done 3< names1.txt 4< names2.txt
Как можно видеть, аргументы здесь names1.txt и names2.txt при переходе в argv [1] и argv [2] соответственно. Но даже если аргументы настроены идеально, почти так же, как fopen считает, что должен искать в файле names1.txt файл .bin, но в действительности файлы .bin находятся в той же папке, что и agilent_bin_reader. c, names1.txt и names2.txt. Не должно быть никаких проблем с каталогами, если только мой сценарий. sh заставляет fopen только смотреть на файл .txt, что argv []
Я хочу, чтобы код делал это в основном:
linux_shell$ ./agilent_bin_reader names1.txt(1st line) names2.txt(1st line)
linux_shell$ ./agilent_bin_reader names1.txt(2nd line) names2.txt(2nd line)
linux_shell$ ./agilent_bin_reader names1.txt(3rd line) names2.txt(3rd line)
....
....
linux_shell$ ./agilent_bin_reader names1.txt(81,569th line) names2.txt(81,569th line)
*EOF of both .txt files, iteration complete
Мой файл names1.txt выглядит так:
des_trace1.bin
des_trace2.bin
des_trace3.bin
...
des_trace81569.bin
Мой файл names2.txt выглядит как:
trace1.csv
trace2.csv
trace3.csv
...
trace81569.csv
Вот код конвертера, предоставленный мне (находится по адресу http://www.dpacontest.org/agilent_bin_reader.c) {Я назвал эту программу agilent_bin_reader. c точно так же, как компания, которая ее создала сделал}