BlinCT
BlinCT23. Oktober 2020 14:47

Открытие файла и чтение данных из него по средством башевского запроса

C

Всем привет.
Есть программа которая должна прочитать данные из файла, но открывать файл надо не чере fopen а как аргумент передаваемый программе.
./sheet (разные аргуенты которые будут обрабатыватся в коде) tab2.txt
А вот последние 2 аргумента они не обрабатываются в коде, первый это открытие файла а второй это запись результата в другой файл.

Вопрос в том, как перехватывать этот поток чтобы можно было обрабатывать получаемые символы?
Прога сишная

Спасибо.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

7
Федор
  • 23. Oktober 2020 14:54
  • (bearbeitet)

Не понятен вопрос.
Вызывается сторонняя программа для чтения и обработки файлов?
Нужно получить вывод сторонней программы из потока вывода?

    BlinCT
    • 23. Oktober 2020 17:26

    По сути да, так как в проге нельзя использовать fopen для открытия файла то надо перехватывать поток другим способом.

      Федор
      • 23. Oktober 2020 18:05

      Тогда надо запускать стороннюю программу через QProcess и читать от нее вывод через QIODevice::readAll().
      Вот простой пример:

      QProcess *newProcess = new QProcess();
      
      connect(newProcess,  QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
          [=](int exitCode, QProcess::ExitStatus exitStatus) {
              if (exitStatus == QProcess::NormalExit) {
                  QByteArray reply = m_avsProcess->readAll();
              }
          });
      
      QString pathToExeFile{"C:\\externalProgramm.exe"};
      QStringList arguments{"C:\\inputFile.txt", "arg2", "arg3"};
      
      newProcess->start(pathToExeFile, arguments);
      
        BlinCT
        • 23. Oktober 2020 18:12

        Проблема в том что это Сишная прога, ничего стороннего(

          BlinCT
          • 23. Oktober 2020 18:50
          int main(int argc, char** argv)
          {
              int line = 0;
          
              char* key   = "-d";
              char* irowV  = "irow";
              char* arowV = "arow";
              char* drowV = "drow";
              char* drowsV = "drows";
              char* icolV = "icol";
              char* acolV = "acol";
              char* dcolV = "dcol";
              char* dcolsV = "dcols";
          
              if (argc > 1)
              {
                  if (strcmp(argv[1], key) == 0)
                  {
                      int i = 0, n;
                      char z , c, p, *e, arr[1000];
                      argv[4] = &c;
                      argv[5] = &p;
          
          
                      while ((z = getchar()) != '\0')
                      {
          
                          while (getchar() != '\n')
                          {
                              arr[i] = z;
                              ++i;
                          }
          
                      ++line;
          
                      arr[i] = '\n';
          
                      if (i < 1001)
                      {//10кб
          
                          if (strcmp(argv[3], irowV) == 0)
                          {
          
                              irow(c, arr, (char) line);
                              line++;
          
                          }
          
          
          
                          if (strcmp(argv[3], arowV) == 0)
                          {
          
                              arow(arr);
          
                              printf("\n");
                          }
          
          
          
                          if (strcmp(argv[3], drowV) == 0)
                          {
          
                              drow(c, (char) line, arr);
          
                          }
          
          
          
                          if (strcmp(argv[3], drowsV) == 0)
                          {
          
                              drows((char) line, c, p, arr);
          
                          }
          
          
          
                          if (strcmp(argv[3], icolV) == 0)
                          {
          
                              icol(c, arr);
                              ++line;
                          }
          
          
          
                          if (strcmp(argv[3], acolV) == 0)
                          {
                              acol(arr);
          
                          }
          
                      } else
                      {
                      }
          
                  }
          
                  } else {
                      }
          
          
              } else {
                  }
          
          
          
              return 0;
          }
          

          Это то что по логике получилось набросать, но я самневаюсь что это правильно.

            BlinCT
            • 24. Oktober 2020 05:40

            В общем вопрос конкретно про 25 строку, правильно ли так получать поток или нет

              BlinCT
              • 24. Oktober 2020 07:14

              И так же интересно как в случаи чтения из потока таким путем можно узнавать об окончании файла?

                Kommentare

                Nur autorisierte Benutzer können Kommentare posten.
                Bitte Anmelden oder Registrieren
                Letzte Kommentare
                ИМ
                Игорь Максимов5. Oktober 2024 07:51
                Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                d
                dblas55. Juli 2024 11:02
                QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                k
                kmssr8. Februar 2024 18:43
                Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                EVA
                EVA25. Dezember 2023 10:30
                Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
                Jetzt im Forum diskutieren
                J
                JacobFib17. Oktober 2024 03:27
                добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
                JW
                Jhon Wick1. Oktober 2024 15:52
                Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
                КГ
                Кирилл Гусарев27. September 2024 09:09
                Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
                F
                Fynjy22. Juli 2024 04:15
                при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

                Folgen Sie uns in sozialen Netzwerken