Вставьте строку между двумя маркерами - PullRequest
1 голос
/ 08 апреля 2010

У меня есть требование вставить строку между двумя маркерами.

Сначала я получаю строчку (из файла, хранящегося на сервере) между # DATA # и # END #, используя:

function getStringBetweenStrings($string,$start,$end){ 
    $startsAt=strpos($string,$start)+strlen($start);
 $endsAt=strpos($string,$end, $startsAt);
 return substr($string,$startsAt,$endsAt-$startsAt);
} 

Я делаю некоторую обработку и, основываясь на деталях строки, запрашиваю некоторые записи.Если есть записи, мне нужно иметь возможность добавить их в конец строки, а затем заново вставить строку между # DATA # и # END # в файле на сервере.

Как мне лучше всегодобиться этого?

Возможно ли вставить запись в файл за раз до # END # или лучше всего манипулировать строкой на сервере и просто вставить поверх существующей строки в файле насервер?

Пример данных:

AGENT_REF^ADDRESS_1^ADDRESS_2^ADDRESS_3^ADDRESS_4^TOWN^POSTCODE1^POSTCODE2^SUMMARY^DESCRIPTION^BRANCH_ID^STATUS_ID^BEDROOMS^PRICE^PROP_SUB_ID^CREATE_DATE^UPDATE_DATE^DISPLAY_ADDRESS^PUBLISHED_FLAG^LET_RENT_FREQUENCY^TRANS_TYPE_ID^NEW_HOME_FLAG^MEDIA_IMAGE_00^MEDIA_IMAGE_TEXT_00^MEDIA_IMAGE_01^MEDIA_IMAGE_TEXT_01^~

#DATA#

//Property records would appear here and match the string above, each field separated with ^ and terminating with ~

//Once the end of data has been reached, it will be fully terminated with:

#END#

Когда я проверяю новые свойства, я делаю следующее:

  1. Получение всех существующих свойств между #DATA# и # END #
  2. Получить идентификаторы свойств и запросить новые свойства, которые не соответствуют этим идентификаторам

Затем мне нужно повторно вставить новые свойства перед #END #, но после последнего свойства в файле.

Структура файла - файл Rightmove BLM.

Ответы [ 2 ]

0 голосов
/ 18 марта 2011

Я бы извлек данные за 3 шага:

1) Извлечь данные из файла:

<?php
preg_match("/#DATA#(.+)#END#/s", $string, $data); 
?>

2) Извлечь каждую строку данных:

<?php
preg_match_all("/((?:.+\^){2,})~/", $data[1], $rows, PREG_PATTERN_ORDER);
// The rows with data will be stored in $rows[1]
?>

3) Управление данными в каждой строке или добавление новых строк:

<?php
//Add
// Add new row to the end of the array
$data[1][] = implode('^', $newRowArray);
//Use
// Creates an array with all the data from the row '0'
$rowData = preg_split("/\^/", $data[1][0], -1, PREG_SPLIT_NO_EMPTY);

//Save the changes
//$newData should be all the rows together (with the '~' at the end of each row)
//$string is the original string with all the information
$file = preg_replace("/(#DATA#\r?\n).+(\r?\n#END#)/s", "\1".$newData."\2", $string);

Надеюсь, это поможет вам в вашей проблеме.

0 голосов
/ 08 апреля 2010

Просто сделайте str_replace () старых данных с новыми:

$str = str_replace('#DATA#'.$oldstr.'#END#', '#DATA#'.$newstr.'#END#', $str);
...