2012-02-09 7 views
0

У меня есть файл с именами путей к файлам:Какой метод использовать при поиске строки в файле

/my/path1 
/my/path11 
/my/path12 
/my/path13 

Файл структуры является то, что он имеет отдельные пути в каждой строке. Все, что я хочу сделать, это поиск строки /my/path1 или любого другого в вышеупомянутом файле много раз

Я мог бы придумать 2 метода.

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

  2. Загрузите содержимое в буфер и выполните поиск с помощью буфера. Но поскольку я не контролирую размер файла, я должен быть осторожным здесь.

Каков наилучший подход? Я работаю в unix. Есть ли какие-либо встроенные библиотеки в C, которые я могу использовать для этой цели? Или как я могу выполнить ту же задачу, используя awk в коде C.

+0

вы должны использовать C и не можете просто использовать системную команду с семейством execv 'sed' /' awk'? иначе exec: 'sed -n '/ pathtomatch/p' pathfile.txt' – Bort

ответ

1

Если вы используете stdio, он сделает буферизацию для вас. Вы можете изменить его работу, используя функцию setvbuf для буферизации более одной строки. getline может использоваться для проверки по строкам.

+0

' getline' является частью C++, не так ли? – mikithskegg

+0

Это часть stdio (расширение GNU) - C. См. Http://www.gnu.org/software/libc/manual/html_node/Line-Input.html Или вы можете использовать fgets –

+0

O, спасибо. Я не знал этой функции. Я читал 'man getline' и узнал, что это очень полезно. Особенно его способность перераспределять динамический буфер, если он недостаточно велик, чтобы получить всю строку. – mikithskegg

0

Я думаю, что загрузка всего файла в память - это не очень хорошая идея. Использование fgets и strcmp - лучший способ, я думаю.