2014-12-28 4 views
0

У меня есть текстовый файл с большим количеством данных. Я добрался до извлечения имен полей между символьными утверждениями.Поиск повторяющейся строки в файле TEXT с использованием PHP

Что бы я хотел, чтобы мой код выполнял, сканируйте ENTRE текстовый файл. по какой-то причине он останавливается с первым вхождением символов/строки.

<?PHP 

//First, open the file. Change your filename 
$file = "datafile1.txt"; 
$handle = fopen($file, "r"); 
$contents = fread($handle, filesize($file)); 

for ($i=0; $i=100; $i+10){ 
    $word1='"cat_id'; 
    $word2='"category"'; 

    $a = strpos($contents, $word1); 
    $b = strpos($contents, $word2); 

    $between=substr($contents, $a, ($b - $a)); 

    echo $between; 

    ////////////////////////////////// 

    $word1='"category'; 
    $word2='"name"'; 

    $c = strpos($contents, $word1); 
    $d = strpos($contents, $word2); 

    $between=substr($contents, $c, ($d - $c)); 

    echo $between; 
    //////////////////////////////////// 

    $word1='"name'; 
    $word2='"description"'; 

    $e = strpos($contents, $word1); 
    $f = strpos($contents, $word2); 

    $between=substr($contents, $e, ($f - $e)); 

    echo $between; 
} 
fclose($handle); 

?> 

Я получил возврат

"cat_id": "16349", "категория": "Приключение", "имя": "Убийцы IV Black Flag - Xbox 360",

но он останавливается там, где повторяются cat_id и категории, а также имена ... ну, компьютерные игры.

Мне нужно отсканировать весь текстовый файл, чтобы поиск повторялся, надеюсь, получить список из результатов игр и категорий.

* Редактировать: Sorry. вот образец файла данных, который нуждается в синтаксическом анализе.

"cat_id": "16349", 
    "category": "Adventure", 
    "name": "Assassin's Creed IV Black Flag - Xbox 360", 
    "description": "It is 1715. Pirates rule the Caribbean and have es... (visit site URLs for full  description)", 
    "updated_at": 1419672679, 
    "width": "139.70", 
    "sem3_id": "1AEIvknN7uwqG2GcwSCMK8", 
    "created_at": 1374830955, 
    "platform": "Xbox 360", 
    "height": "12.70", 
    "length": "190.50", 
    "sitedetails": [ 
    { 
     "sku": "B00BMFIXT2", 
     "latestoffers": [ 
     { 
      "seller": "JNJ Shop", 
      "lastrecorded_at": 1419672600, 
      "currency": "USD", 
      "firstrecorded_at": 1419672600, 
      "id": "7g2fpY7BOSE0sU2oKkUkeY", 
      "price": "11.00", 
      "shipping": "3.99", 
      "condition": "New" 
     }, 

200 lines later..... 

"cat_id": "20923", 
    "category": "Games", 
    "name": "Disney Infinity Starter Pack - PlayStation 3", 
    "description": "Product Description Platform: PlayStation 3 | Edit... (visit site URLs for full       description)", 
    "updated_at": 1419563879, 
    "width": "269.24", 
    "created_at": 1375817329, 
    "sem3_id": "0FIqEyeRf4SMgiYaoKC6yO", 
    "platform": "PlayStation 3", 
    "height": "90.93", 
    "length": "358.39", 
    "sitedetails": [ 
    { 
     "sku": "7635065", 
     "latestoffers": [ 
     { 
      "seller": "BestBuy", 
      "lastrecorded_at": 1419552600, 
      "firstrecorded_at": 1419015000, 
      "currency": "USD", 
      "availability": "In stock", 
      "price": "66.98", 
      "id": "5EefaVFIhs2UKYA0Q0qIae", 
      "condition": "New" 
     }, 
+0

ли записи в текстовом файле разделены каким-то образом (с новой строки, к примеру)? Не могли бы вы скопировать/вставить часть текстового файла? – sinisake

ответ

0

aIt фактически не останавливается. Каждый раз, когда вы загружаете один и тот же контент, и согласно http://php.net/manual/en/function.strpos.php, вы должны получить одинаковое появление вашего указанного текста.

Возможно, вам понадобится использовать третий параметр [, int $ offset = 0], чтобы указать, с чего начать на следующей итерации. Что-л. как:

$a = 0; 
$b = 0; 

for ($i=0; $i=100; $i+10){ 
    $word1='"cat_id'; 
    $word2='"category"'; 

    $a = strpos($contents, $word1, $a); 
    $b = strpos($contents, $word2, $b); 

Если вы собираетесь использовать те же самые слова «cat_id» и «категория», инициализировать их вне ваших итераций.

для ловли всех вхождений вы бы лучше использовать «а» циклы:

$catWord = '"cat_id"'; 
$categoryWord = '"category"'; 

$a = 0; 
$b = 0; 
while (($a = strpos($content, $catWord, $a)) !== false) { 
    $b = strpos($content, $categoryWord, $b); 

    $between = ....