2010-04-08 2 views
1

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

Первоначально я жалом (из файла, хранящегося на сервере) между # 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. Получить Идентификаторы свойств и запрос для новых свойств, которые не соответствуют этим ID

I then необходимо повторно вставить новые свойства до # END #, но после последнего свойства в файле.

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

+1

Просьба привести примеры данных, которые вам нужны для управления – Gordon

+0

Непонятный вопрос. Просьба привести некоторые примеры данных и пример того, как должен выглядеть результат. –

+0

Как вы получаете идентификаторы свойств? это идентификатор AGENT_REF? – SERPRO

ответ

0

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

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

Я бы извлечь данные в 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); 

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

Смежные вопросы