BlinCT
24 жовтня 2020 р. 00:47

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

C

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

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

Спасибо.

3

Вам це подобається? Поділіться в соціальних мережах!

7
Федор
  • 24 жовтня 2020 р. 00:54
  • (відредаговано)

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

    BlinCT
    • 24 жовтня 2020 р. 03:26

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

      Федор
      • 24 жовтня 2020 р. 04:05

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

      1. QProcess *newProcess = new QProcess();
      2.  
      3. connect(newProcess, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
      4. [=](int exitCode, QProcess::ExitStatus exitStatus) {
      5. if (exitStatus == QProcess::NormalExit) {
      6. QByteArray reply = m_avsProcess->readAll();
      7. }
      8. });
      9.  
      10. QString pathToExeFile{"C:\\externalProgramm.exe"};
      11. QStringList arguments{"C:\\inputFile.txt", "arg2", "arg3"};
      12.  
      13. newProcess->start(pathToExeFile, arguments);
        BlinCT
        • 24 жовтня 2020 р. 04:12

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

          BlinCT
          • 24 жовтня 2020 р. 04:50
          1. int main(int argc, char** argv)
          2. {
          3. int line = 0;
          4.  
          5. char* key = "-d";
          6. char* irowV = "irow";
          7. char* arowV = "arow";
          8. char* drowV = "drow";
          9. char* drowsV = "drows";
          10. char* icolV = "icol";
          11. char* acolV = "acol";
          12. char* dcolV = "dcol";
          13. char* dcolsV = "dcols";
          14.  
          15. if (argc > 1)
          16. {
          17. if (strcmp(argv[1], key) == 0)
          18. {
          19. int i = 0, n;
          20. char z , c, p, *e, arr[1000];
          21. argv[4] = &c;
          22. argv[5] = &p;
          23.  
          24.  
          25. while ((z = getchar()) != '\0')
          26. {
          27.  
          28. while (getchar() != '\n')
          29. {
          30. arr[i] = z;
          31. ++i;
          32. }
          33.  
          34. ++line;
          35.  
          36. arr[i] = '\n';
          37.  
          38. if (i < 1001)
          39. {//10кб
          40.  
          41. if (strcmp(argv[3], irowV) == 0)
          42. {
          43.  
          44. irow(c, arr, (char) line);
          45. line++;
          46.  
          47. }
          48.  
          49.  
          50.  
          51. if (strcmp(argv[3], arowV) == 0)
          52. {
          53.  
          54. arow(arr);
          55.  
          56. printf("\n");
          57. }
          58.  
          59.  
          60.  
          61. if (strcmp(argv[3], drowV) == 0)
          62. {
          63.  
          64. drow(c, (char) line, arr);
          65.  
          66. }
          67.  
          68.  
          69.  
          70. if (strcmp(argv[3], drowsV) == 0)
          71. {
          72.  
          73. drows((char) line, c, p, arr);
          74.  
          75. }
          76.  
          77.  
          78.  
          79. if (strcmp(argv[3], icolV) == 0)
          80. {
          81.  
          82. icol(c, arr);
          83. ++line;
          84. }
          85.  
          86.  
          87.  
          88. if (strcmp(argv[3], acolV) == 0)
          89. {
          90. acol(arr);
          91.  
          92. }
          93.  
          94. } else
          95. {
          96. }
          97.  
          98. }
          99.  
          100. } else {
          101. }
          102.  
          103.  
          104. } else {
          105. }
          106.  
          107.  
          108.  
          109. return 0;
          110. }

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

            BlinCT
            • 24 жовтня 2020 р. 15:40

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

              BlinCT
              • 24 жовтня 2020 р. 17:14

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

                Коментарі

                Only authorized users can post comments.
                Please, Log in or Sign up
                • Останні коментарі
                • Evgenii Legotckoi
                  16 квітня 2025 р. 17:08
                  Благодарю за отзыв. И вам желаю всяческих успехов!
                • IscanderChe
                  12 квітня 2025 р. 17:12
                  Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
                • AK
                  01 квітня 2025 р. 11:41
                  Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
                • Evgenii Legotckoi
                  09 березня 2025 р. 21:02
                  К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
                • VP
                  09 березня 2025 р. 16:14
                  Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…