LINUX.ORG.RU

Чтение значения строки с файла


0

1

Приветствую! Имеется файл (test.txt) с подобным содержимым:

name "John"
name2 "Smith"
user "tester"
role "administrator"
Нужно прочитать значение user и записать его в переменную $testresult, без кавычек используя PHP.

Заранее благодарен за помощь.



Последнее исправление: FailOverFlow (всего исправлений: 1)

Если файл небольшой, то можно вот так.

<?php

$lines = file('test.txt');
foreach ($lines as $line) {
    if (preg_match('/^user\ "(.*)"/', $line, $matches)) {
        $testresult = $matches[1];
        echo "$testresult\n";
    }   
}   

?>
Если большой, то открывай его через fopen() и читай построчно через fgets(), точно так же проверяя каждую строку.

shell-script ★★★★★
()

используй xml-парсер, не выё***.

makeB
()
Ответ на: комментарий от FailOverFlow

Я PHP не знаю (и знать не хочу).

Советую ЛОР-wiki почитать. Если ничего интересного не найдется — создать отдельную тему.

P.S. Грамотно заданный вопрос — уже половина решения. А грамотно расставленные теги ускорят решение и отвадят троллей.

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 1)

Когда уже сделают отдельный раздел для лабораторок?

linuxnewb
()
Ответ на: комментарий от AITap

default_prog_lang = php, default_distro = ubuntu, etc :3

anonymous
()
Ответ на: комментарий от shell-script

можешь, кстати, объяснить, почему ты не пошёл таким путём:

1. строка 3 - вместо file -> file_get_contents. Так мы получим не массив, а текст. 2. строка 5 - preg_match_all - и тогда PRCE стартует и работает один раз. 3. цикл со сравнениями, которые угодны топикстартеру

Ещё меня чуть-чуть волнует, что для жёстко структуированных вещей куда проще использовать обычный explode, как бы странно он не смотрелся - он куда быстрее всей этой прег-машины.

Так же ты предлагаешь ему вообще запустить 4 разные регулярки на одну строчку, что вообще немного дико.

alexmaru
()

Может лучше мускуль заюзать?

puding
()
Ответ на: комментарий от alexmaru
if ( is_file('test.txt') && $file = file_get_contents('test.txt') ) {
	if ( preg_match_all('/(.*) "(.*)"/', $file, $pm_result) ) {
			$testresult = $pm_result['2']['0'];			
	} else {
		$error = 'corrupted.';
	}
}
alexmaru
()
Ответ на: комментарий от alexmaru

можешь, кстати, объяснить, почему ты не пошёл таким путём:

Всё просто. Я написал это за полминуты, даже не думая о нагрузках и т.д. Собственно, как я и пояснил, для маленького файла, такой вариант покатит. Если парсить надо много и большое в любом случае, имхо, запихивать файл в хеш целиком - это извращение и по хорошему надо читать файл построчно, выдирая из него только нужное. О чём я и предложил самостоятельно подумать ТС-у. :)

Так же ты предлагаешь ему вообще запустить 4 разные регулярки на одну строчку, что вообще немного дико.

А где там у меня их четыре? о_О

shell-script ★★★★★
()
Ответ на: комментарий от shell-script

А где там у меня их четыре? о_О

так в результате же этот человек возьмёт и повторит

    if (preg_match('/^user\ "(.*)"/', $line, $matches)) {
        $testresult = $matches[1];
        echo "$testresult\n";
    }   

чтобы забрать привилегию пользователя, юзернейм, и подумает, что будет прав.

alexmaru
()
Ответ на: комментарий от alexmaru

А, теперь вижу. Я предложил решение, в котором не предусматривалось вытягивания остальных данных(роль и т.д.). Только имена.

shell-script ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.