Как выполнить поиск в текстовом файле? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Прочитал код через сом порт и записал его в текстовый файл, а теперь мне нужно этот код (из текстового файла ) перебрать распознать и выдать обратно через сом порт некие команды, в зависимости от тех данных которые были получены ранее, вот код, который я использую для чтение, собственно там нет ничего интересного код как код.
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <ctype.h>
 
int main(void)
{
    unsigned char result;
    int port = 0x3F8; /* serial port 1 */
    int anc = 0;
    int flag = 0;
    FILE* fin;
    fin = fopen("1.txt", "w+");
    printf("pusk\n");

    outportb(port + 3, 0x80); /*set dlab on*/
    outportb(port + 1, 0x00); /*starschiy bait scorosti*/
    outportb(port + 0, 0x0C); /*scorosti mlads bait 9600*/
    outportb(port + 3, 0x03); /* set dlab off,8bit,no perity,1 stop bit */
    outportb(port + 1, 0x01); /*preryvanie po priemu*/
    inportb(port + 3); /*zadergka ignorirovan*/
    outportb(port + 2, 0xC7); /*FIFO registr */
    outportb(port + 4, 0x0b); /*DTR,RTS,OUT2*/
    inportb(port + 0); /*obnulenie bufera*/

    while (flag == 0)
    {
        result = inportb(port + 2);
        if (result > 195) /*pervoe cc posle priema iz labview*/
        {
            result = inportb(port);
            printf("%c", result);
            fprintf(fin, "%c", result);
        }
        if (result == '!')
            goto ddd;
    }
ddd:
    while (1)
    {
        anc = getch();
        if (anc == 27)
            goto breakall;
    }
breakall:
 
    return 0;
}
Вопрос вот какой, каким образом можно выполнить поиск соответствия одного значение другому? Перебор файла построчно я могу наверно выполнить как то так c помощью этой функции
fseek(file,0l,SEEK_SET);
, а затем каждую строчку мне видимо нужно будет читать посимвольно функцией типа
getchar()
и перебирать, находить там метку

#

, где заканчивается слово для поиска и где начинается ответная часть? По логике наверно так, а затем эту ответную часть записывать в другой текстовый файл и уже его потом отправлять обратно через сом порт прямо в виде текстового файла, так можно сделать? Текстовый файл соответствия наверно может быть примерно таким
SYST:COMM:SER:BAUD? # 1200
READ:TS:BITR # 38E6
SYST:KLOC #0
SYSY:COMM:SER:PAR # 30
, а входной файл таким
SYST:COMM:SER:BAUD?
READ:TS:BITR
SYST:KLOC
SYSY:COMM:SER:PAR
а выходной файл таким
 1200
38E6
0
30
Наверно непонятно получилось объяснить?

Решение задачи: «Как выполнить поиск в текстовом файле?»

textual
Листинг программы
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <string.h>
 
#define SIZE 256
       int main(void)
{
   unsigned char result;
   int port = 0x3F8;           /* serial port 1 */
   int anc=0; int flag=0;
   FILE *fin,*fout; char line[SIZE]; 
 
     char string[15];
   char *ptr, c = '#';
 fin=fopen("1.txt","w");
 
   printf("pusk\n");
 
   
        outportb(port+3,0x80); /*set dlab on*/
        outportb(port+1,0x00); /*starschiy bait scorosti*/
        outportb(port+0,0x0C); /*scorosti mlads bait 9600*/
        outportb(port+3,0x03);/* set dlab off,8bit,no perity,1 stop bit */
        outportb(port+1,0x01);  /*preryvanie po priemu*/
        inportb(port+3);    /*zadergka ignorirovan*/
        outportb(port+2,0xC7); /*FIFO registr */
        outportb(port+4,0x0b);  /*DTR,RTS,OUT2*/
        inportb(port+0);    /*obnulenie bufera*/
   
 
  while (flag==0)
  {
   result = inportb(port+2);
    if  (result>195) /*pervoe cc posle priema iz labview*/
    {
        
        result = inportb(port);
        
   ptr = strrchr(result, c);
   strcpy(string, "This is # string");
   ptr = strrchr(string, c);
   if (ptr)
      printf("The character %c is at position: %d\n", c, ptr-string);
   else
      printf("The character was not found\n");
    
    }
  if (result=='!')
  goto ddd;
  } /*while*/
    ddd:
    while (1)
    {
    anc=getch();
    if (anc==27)
    goto breakall;
    }
 breakall:
 
   return 0;
   }
 /*main*/

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы: , , , .
  2. Определяем размер буфера в 256 байт.
  3. Объявляем переменные:
    • result - для хранения результата чтения из порта.
    • port - для выбора порта (в данном случае 0x3F8 - serial port 1).
    • anc, flag - для контроля выполнения программы.
    • fin, fout - для работы с файлами.
    • line - для хранения строки, которую мы читаем из файла.
    • string - для хранения строки, в которой мы ищем символ.
    • ptr - указатель на символ, который мы ищем в строке.
    • c - символ, который мы ищем в строке.
  4. Открываем файл 1.txt в режиме записи (fopen(1.txt,w)).
  5. Выводим на экран команду для настройки порта (printf(pusk\n)).
  6. Настраиваем порт для работы:
    • Устанавливаем режим 8 бит, нет чётности, 1 стоповый бит (outportb(port+3,0x03)).
    • Устанавливаем начальный байт для приёма данных (outportb(port+1,0x01)).
    • Задаём скорость передачи данных (outportb(port+0,0x0C)).
  7. Входим в бесконечный цикл while (flag==0), который будет выполняться до тех пор, пока флаг не изменит своё значение.
  8. Внутри цикла считываем данные из порта и проверяем, если они больше 195, то это означает, что мы получили данные из LabView.
  9. Если полученный байт равен символу '#', то мы ищем этот символ в строке, которую мы храним в переменной string.
  10. Если символ найден, то выводим сообщение с его позицией в строке.
  11. Если символ не найден, то выводим сообщение об этом.
  12. Если полученный байт равен символу '!', то мы переходим к блоку кода, который находится после этого символа (goto ddd;).
  13. Если полученный байт равен 27, то мы выходим из программы (goto breakall;).
  14. Если флаг изменил своё значение, то мы выходим из цикла while (flag==0).
  15. Если anc равно 27, то мы выходим из программы (goto breakall;).
  16. Закрываем файл 1.txt (fclose(fin)).
  17. Возвращаем 0, что означает успешное выполнение программы (return 0).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.6 из 5
Похожие ответы