Выберите конкретную текстовую форму .TXT и сгруппируйте содержимое

0

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

 file.txt 

Этот файл выглядит так:

 Switzerland (SUI) # - 23 players
(1) GK Pascal Zuberbühler ## 40, Basel (SUI)
(12) GK Diego Benaglio ## 1, Nacional (POR)
(21) GK Fabio Coltorti ## 2, Grasshoppe (SUI)
(3) DF Ludovic Magnin ## 30, Stuttgart (GER)

Я хочу выбрать

(SUI), (POR), (SUI) & (GER)

Поэтому я создал Regex

#\W([A-Z]){3}\S#

Это код, который я уже сделал

$myfile = fopen("2006/ch-switzerland.txt", "r") or die("Unable to open file!");
    echo fread($myfile,filesize("2006/ch-switzerland.txt"));
    fclose($myfile);

Поэтому теперь я хочу выбрать конкретный текст и поместить его в группы, чтобы я увидел

(SUI)2, (POR), (GER)

Мои навыки PHP не очень большие, поэтому я надеюсь, что вы сможете мне помочь.

Спасибо за ваше время ;)

Теги:

1 ответ

1
Лучший ответ

С file_get_contents есть более простой способ прочитать файл. Однако, поскольку вы, кажется, хотите пропустить первую строку (назвав футбольную команду), я предпочел бы читать файл в виде строк. Это можно сделать с file.

Кроме того, вам не нужны круглые скобки вокруг ваших символов регулярного выражения: #\W[AZ]{3}\S#

<?php

# We use an array for counting
$counts = array();

# Read the file lines into an array
$lines = file('test.txt');

# Iterate over all lines but the first (1 means we start at line 1, instead of 0)
foreach (array_slice($lines, 1) as $line) {
    # Do the regular expression and check if it was a match
    $was_match = preg_match('#\W[A-Z]{3}\S#', $line, $match);
    if ($was_match)
    {
        # check if we already counted this country
        if (!isset($counts[$match[0]]))
            $counts[$match[0]] = 0; # if not, set count to initial zero

        # increment the country count by one
        $counts[$match[0]] += 1;
    }
}

var_dump($counts);

// array(3) {
//   ["(SUI)"]=>
//   int(2)
//   ["(POR)"]=>
//   int(1)
//   ["(GER)"]=>
//   int(1)
// }
  • 0
    Большое спасибо. Это сработало для меня! Спасибо, что позволили. (маленькая деталь, которую вы забыли о бэкетах после <pre> if (! isset ($ countts [$ match [0]])) </ pre>
  • 0
    Вы имеете в виду кудрявые {} ? В большинстве языков с синтаксисом в стиле C (также в PHP) скобки не нужны, если следует только одно утверждение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню