Проблема с файлом с разделителями в формате txt - PullRequest
5 голосов
/ 31 марта 2012

Я пытаюсь создать сценарий оповещения об адресе для моей местной добровольной пожарной команды, и я застрял.

У меня есть файл с разделителем txt с именем preplan.txt, содержащий такие строки:*

и т. Д.

У меня также есть строка с именем $ jobadd, которая является адресом для задания ...

Что мне нужно сделать в php, если адрес заданиято же самое ($ jobadd), что и любой из адресов оповещения в текстовом файле, затем отображает соответствующее имя, адрес, ссылку и примечания. Необходимо также игнорировать, написано ли оно заглавными буквами или нет.По сути, если $ jobadd = адрес в текстовом файле отображает эту информацию ...

Я могу только повторить последнюю строку.

Ответы [ 3 ]

4 голосов
/ 31 марта 2012

Сначала разбейте строку на строки:

$lines = explode("\n", $data); // You may want "\r\n" or "\r" depending on the data

Затем разделите и обрежьте также эти строки:

$data = array();

foreach($lines as $line) {
    $data[] = array_map('trim', explode('|', $line));
}

Наконец, найдите $jobadd в столбце № 3, то есть индекс № 2, и напечатайте данные, если они найдены:

foreach($data as $item) {
    if(strtolower($item[2]) === strtolower($jobadd)) {
        // Found it!
        echo "Name: {$item[1]}, link: {$item[3]}, notes: {$item[4]}";
        break;
    }
}
1 голос
/ 31 марта 2012

Обновлено

Поток выложен немного.Просто введите правильный путь к файлу для $file, и все будет хорошо.

$data = file_get_contents($file);

$lines = array_filter(explode("\n", str_replace("\r","\n", $data)));

foreach($lines as $line) {

    $linedata = array_map('trim', explode('|', $line));

    if(strtolower($linedata[2]) == strtolower($jobadd)) {
        // Found it!
        echo "Name: {$linedata[1]}, link: {$linedata[3]}, notes: {$linedata[4]}";
        break;
    }
}
0 голосов
/ 31 марта 2012
<?php

    define('JOBADDR','ALERTADDRESS3');

    # get all lines
    $pl = file_get_contents('preplan.txt');
    $pl = explode("\n",$pl); 

    # cleanup
    foreach($pl as $k=>$p){ # goes through all the lines
        if(empty($p) || strpos($p,'|')===false || strtoupper($p)!==$p /* <- this checks if it is written in capital letters, adjust according to your needs */ )
            continue;

        $e = explode('|', $p); # those are the package elements (refid, task name, address, ... )
        if(empty($e) || empty($e[2])) # $e[2] = address, it's a 0-based array
            continue;

        if(JOBADDR !== trim($e[2])) # note we defined JOBADDR at the top
            continue;

        # "continue" skips the current line

        ?>


        <p>REF#<?=$e[0]; ?> </p>
        <p><b>Name: </b> <?=$e[1]; ?></p>
        <p><b>Location:</b> <a href="<?=$e[3]; ?>"><?=$e[2]; ?></a> </p>
        <p><b>Notes: </b> </p>
        <p style="text-indent:15px;"><?=empty($e[4]) ? '-' : nl2br($e[4]); ?></p>

        <hr />


        <?php
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...