Разбор текстового файла в JavaScript? Или что-то лучше? - PullRequest
1 голос
/ 14 июня 2011

Мне интересно, как я могу проанализировать текстовый файл в Javascript и создать счетчики для каждого элемента в текстовом файле. Пример, текстовый файл, который содержит:

яблоко
оранжевый
банан
яблоко
яблоко
персик

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

яблоко 3
апельсин 1
банан 1
персик 1

Javascript может быть не самым лучшим, так как это буквально миллионы строк, подобных этой. Я мог бы сделать это в чем-то другом, например в PHP, и сохранить результаты в MySQL. Я хочу запустить эту процедуру, так как элементы добавляются в файл и снимать результаты после каждого запуска для исторического сравнения.

Каков наилучший способ сделать это?

Ответы [ 3 ]

2 голосов
/ 14 июня 2011

Звучит как работа для базы данных.Вы можете считать элементы в таблице базы данных в миллисекундах, в то время как анализ текстового файла с использованием скомпилированного кода займет несколько секунд, а использование Javascript на стороне клиента займет несколько минут.довольно просто:

select Fruit, count(*)
from FruitTable
group by Fruit

Редактировать:

Я создал тестовую таблицу в SQL Server с 8 миллионами записей, и указанный выше запрос выполняется примерно за три секунды.

0 голосов
/ 14 июня 2011

используйте perl, пример:

#!/usr/bin/perl -w
use strict;

my $file   = shift;
my %fruits = ();

open(my $handle, "<", $file);

while(defined(my $fruit = <$handle>)) {
        chomp $fruit;
        $fruits{$fruit}++;
}

foreach my $key (sort keys %fruits) {
        print "$key: ", $fruits{$key}, "\n";
}

затем запустите его с perl fruits.pl FILENAME_TO_FRUITS_FILE

в конечном счете, вышесказанное - самый простой способ сделать это, но вам действительно следует переместить его в базу данных, если у вас есть миллионов записей. любой простой учебник по PHP / MySQL будет полезен.

0 голосов
/ 14 июня 2011

Это с PHP

$string = file_get_contents ("textfile.txt");

$string_array = explode("\n",$string); foreach($string_array as $value) {
        if(isset($str_count[$value]))
                $str_count[$value]++;
        else
                $str_count[$value]=1; } foreach($str_count as $key => $value)
        echo $key.": ".$value."<br>";

textfile.txt:

apple
orange
banana
apple
apple
peach

Выход:

apple: 3
orange: 1
banana: 1
peach: 1
...