Перейдите к следующей строке файла, если встречается запятая ( , ), и продолжите поиск в C
Я строил что-то вроде симулятора брандмауэра. Очевидно, я добавлю набор правил.Поэтому я использую файл .txt для своих правил. Примеры записей txt :
HOST_IP, HOST_PORT, DEST_IP, DEST_PORT 192.168.1.100, 32, 127.0.0.1, 567 192.168.1.101, 32, 127.0.0.1, 09 192.168.1.102, 32, 127.0.0.1, 64 192.168.1.103, 32, 127.0.0.1, 56
Поэтому я хочу, чтобы, если файл ищет ip-адрес хоста, он сначала искал все IP-адреса хоста. Как только встречается запятая ( ,), указатель переходит на следующую строку и проверяет IP-адрес (перед первой запятой) во второй строке. Если он найден, он должен вернуться, иначе он должен перейти к следующей строке после того, как он встретит запятую (,) и искать IP-адрес в следующей строке.
Что я уже пробовал:
#include <stdio.h> #include <stdlib.h> main( ) { FILE *fp; char c[20],*string; fp = fopen("test.txt", "r"); if (fp == NULL) printf("File doesn't exist\n"); else { do { fscanf(fp,"%s",string); t=getc(fp); if(strcmp(string,c)){printf("Found");fclose(fp);} if(t==",")//here i need to jump to next line putchar(c); /* display it on the monitor */ } while (c != EOF); /* repeat until EOF (end of file) */ } fclose(fp); }
Jochen Arndt
Я предлагаю использовать другой подход:
Загрузите полное содержимое файла в память и обработайте его там. Это будет намного проще, чем использовать операции на основе файловых дескрипторов. Обратите внимание, что использование строковых функций в таких буферах требует выделения еще одного байта и установки его (последнего) в ноль.
Затем используйте strchr (), strstr () и, возможно, strpbrk () и strrchr (), чтобы найти интересующие позиции.
Например:
Если у вас есть интересная позиция и вы хотите перейти к следующей строке, найдите следующее вхождение '\n' с помощью strchr() и добавьте его, если оно найдено.
Suvendu Shekhar Giri
В чем проблема с кодом, который вы пробовали?
«_Superman_»
Поскольку вы используете C++, я рекомендую вам взглянуть на регулярные выражения (std:: regex).