Получить определенные строки из текстового файла и положить в CSV - PullRequest
0 голосов
/ 14 декабря 2011

У меня есть текстовый файл с сотнями строк данных, каждая из которых разделена новой строкой.

data.txt:

......Tue Dec 13 [alphanumeric1.alphanumeric1] : blah [alphanumeric1] ? blahblah [alphanumeric1] : blah
..Tue Dec 13 [alphanumeric2.alphanumeric2] : blah [alphanumeric2] ? blahblah [alphanumeric2] : blah
..................Tue Dec 13 [alphanumeric3.alphanumeric3] : blah [alphanumeric3] ? blahblah [alphanumeric3] : blah

Каждая строка изменяется вдлины и уникальны, но у каждого есть три набора [], и данные внутри - то, что я хочу.

Цель состоит в том, чтобы читать в data.txt построчно, высасывая данные в []помещает каждый в свой собственный столбец в CSV.

result.csv:

    col1                         col2            col3

    alphanumeric1.alphanumeric1  alphanumeric1   alphanumeric1
    alphanumeric1.alphanumeric2  alphanumeric2   alphanumeric2
    alphanumeric1.alphanumeric3  alphanumeric3   alphanumeric3

So thats:
alphanumeric1.alphanumeric1,alphanumeric1,alphanumeric1
alphanumeric1.alphanumeric2,alphanumeric2,alphanumeric2
alphanumeric1.alphanumeric3,alphanumeric3,alphanumeric3

У меня есть текстовый файл, открывающийся отлично:

$fh = fopen('data.txt','r');
while ($line = fgets($fh)) {
   echo $line;
}

Но у меня проблемы с preg_match и получением данных [] в csv.

preg_match('/\[(.+)\]/', $line, $matches);

Любая помощь с preg_match и переносом этих данных в .csv будет принята с благодарностью..

1 Ответ

0 голосов
/ 14 декабря 2011

Я предпочитаю работать с preg_match_all, поскольку он будет захватывать более одного вхождения шаблона в пределах $line. Во-вторых, я изменил регулярное выражение на следующее

    preg_match_all('/\[([^\]]+)\]/', $line, $matches);

То, что говорит [^\]]+, соответствует как минимум одному символу, который не является ]. Вы можете изменить модификатор + на *, если вы также хотите перехватывать пустые вхождения, т.е. [].

...