передача нескольких аргументов, являющихся именами файлов, из нескольких текстовых файлов в программу c, запущенную в терминале linux - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть проект, который требует преобразования большого списка файлов .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 точно так же, как компания, которая ее создала сделал}

1 Ответ

0 голосов
/ 26 апреля 2020

Шон в разделе комментариев обнаружил, что моя проблема заключалась в том, что в моих txt-файлах были скрытые символы .. Побежал dos2 unix, и моя проблема сразу исчезла. См. Этот сайт для подробного объяснения: https://www.liquidweb.com/kb/dos2unix-removing-hidden-windows-characters-from-files/

Вот команды, которые я выполнил:

linux_shell$ sudo apt install dos2unix
linux_shell$ dos2unix names1.txt
linux_shell$ dos2unix names2.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...