2010-04-08 6 views
1

J'ai besoin d'insérer une chaîne entre deux marqueurs.Insérer une chaîne entre deux marqueurs

Dans un premier temps je reçois une piqûre (à partir d'un fichier stocké sur le serveur) entre # # DATA et # END # en utilisant:

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

Je fais un peu de traitement et en fonction des détails de la chaîne, une requête pour quelques enregistrements. S'il y a des enregistrements, je dois pouvoir les ajouter à la fin de la chaîne, puis réinsérer la chaîne entre # DATA # et # END # dans le fichier sur le serveur.

Comment puis-je y parvenir au mieux?

Est-il possible d'insérer un enregistrement à la fois dans le fichier avant # END # ou est-il préférable de manipuler la chaîne sur le serveur et juste réinsérer sur la chaîne existante dans le fichier sur le serveur?

Exemple de données:

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# 

Quand je vérifie de nouvelles propriétés, je fais ce qui suit:

  1. Obtenez toutes les propriétés existantes entre # # DATA et # END #
  2. Obtenez le ID des propriétés et requête pour les nouvelles propriétés qui ne correspondent pas à ces ID

Je puis besoin de réinsérer les nouvelles propriétés avant # END #, mais après la dernière propriété dans le fichier.

La structure du fichier est un fichier BLM Rightmove.

+1

Veuillez donner des exemples de données dont vous avez besoin pour manipuler – Gordon

+0

La question n'est pas claire. Veuillez fournir quelques exemples de données et un exemple de ce à quoi devrait ressembler le résultat. –

+0

Comment obtenez-vous les ID des propriétés? est l'AGENT_REF l'ID? – SERPRO

Répondre

0

Il suffit de faire un str_replace() des anciennes données avec la nouvelle:

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

J'extrairaient les données en 3 étapes:

1) extraire les données du fichier:

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

2) Extraire chaque ligne de données:

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

3) Manipulez les données de chaque ligne ou ajouter de nouvelles lignes:

<?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); 

J'espère que cela peut vous aider dans votre problème.

Questions connexes