А зачем эти сложности? За 10 минут можно такой скрипт накатать:
<?php
function println($message) {
echo $message, PHP_EOL;
}
mb_internal_encoding('UTF-8');
$db = new PDO('mysql:host=localhost;port=3306;dbname=torrent;charset=utf8', 'torrent', 'password', [
PDO::ATTR_PERSISTENT => 1,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => 0,
]);
foreach (glob('csv_data/*.csv') as $file) {
$fp = fopen($file, 'r');
if (!is_resource($fp)) {
println("Can't open $file");
continue;
}
$counter = 0;
while (($data = fgetcsv($fp, 0, ';')) !== false) {
if (count($data) == 0 && is_null($data[0])) {
continue;
}
$db->prepare('INSERT INTO `torrents` (`name`,`hash`,`date`,`size`,`topic_id`,`cat_id`,`cat_name`) VALUES (?,?,?,?,?,?,?)')->execute([$data[4], $data[3], $data[6], $data[5], $data[2], $data[0], $data[1]]);
$counter++;
}
println("Processed $counter entries from $file");
fclose($fp);
}
println('Done');
Его можно дополнительно адаптировать к запуску из web (добавив set_time_limit и заменив PHP_EOL на <br>) — секунд за 20 это можно сделать. А так, он уже готов из консоли работать.
Вы привели простейший пример того, что, по вашему мнению, истинную принадлежность выдаёт стиль, используемые парадигмы, паттерны и т. п. По моему мнению, это необъективные признаки. Для меня пример выглядит некорректным, потому что в его сути лежат субъективные явления.
А если работает не так, как задумывалось, то всё равно работает?
Ну да. Никто ведь ведь не в курсе, какие задумки были у прокладки между клавиатурой и стулом. Можно авторитено заявить, что это язык А, потому что у него корректный синтаксис для этого языка. Если синтаксис верен, то можно уверенно говорить, что это язык А. Если синтаксис неверен, никакие другие субъективные признаки не дадут 100%-й уверенности, что это код на языке А. Это может быть «вероятно, код на А» или «скорее всего, код на А», или «с очень большой вероятностью, код на А», но не определённо точно код на языке А.
Вот для примера:
<?php
echo "мам", PHP_EOL;
print (
" я\n\n"
); // выводит "ты"
echo " хачу", PHP_EOL; # делим на 2 *** Нужно не забыть ***
echo " литать" . PHP_EOL; /* *** сварить щи!!! *** */return print("пришей мне крылья"); //TODO: создать экземпляр класса. Компилировать с ключом --enable-opcache аот так: php happibizdey.php --enable-opcache
echo '!!!!!!!!!!!!!'; //@todo !!! разобратся поччему не выводиться !!!
Объективно, это код на PHP. Из комментариев понятно, что нужно сварить щи, но код этого не делает. И, если ещё подумать, он работает не так, как задумывалось, потому что восклицательные знаки не выводятся. Он от этого разве перестанет быть кодом на PHP?
Если я в коде на PHP допущу синтаксическую ошибку (возможно как раз делающую его корректным кодом для JavaScript, например, вместо -> поставлю .), то это всё равно будет код на PHP.
Ну да, будет считаться кодом на PHP. Просто будет ругаться на что-нибудь вроде «Object of class XXX could not be converted to string» (если не существует XXX::__toString()). Это не синтаксическая ошибка. Это оператор конкатенации (в ваших обстоятельствах, во всяком случае, когда вы поменяли «->» на точку), который является частью синтаксиса PHP. В то же самое время, он будет считаться кодом на JavaScript.
Мне, вам, кому-то ещё третьему-четвёртому-пятому можно считать этот код только кодом на PHP и говорить, что это стопроцентно не код на JavaScript, если это нужно. Но это субъективное мнение, которое объективным признаком не может стать.
Вот, например:
function trimString($string)
{
return trim($string);
}
Я считаю это кодом на JavaScript. Оппонент считает это кодом на PHP. И оба мы правы, потому что нет объективных признаков, чтобы стопроцентно отнести этот код к одному языку. Но мы можем спорить, что $ — признак PHP, или что в JS нет trim (я на это отвечу то же самое, что вы мне сказали чуть раньше). И всё равно мы оба останемся правы, потому что со стопроцентной уверенностью можно будет сказать что-то о принадлежности к конкретному языку только после того, как из объективных признаков это станет точно известно. Нетипичность использования $ в JS и то, что оппонент лично код написал на PHP — это субъективные признаки. Он может через несколько минут передумать и сказать, что писал на самом деле на JS — и этот аргумент будет таким же субъективным как и тот, где говорилось про PHP — и это не добавит ровным счётом ничего к объективным оценкам (не убавит тоже, кстати).
* * *
Если совсем хорошо подумать, то синтаксис, за который я так упорно цепляюсь, тоже не может быть объективным признаком, потому что можно интерпретатору PHP скормить «Войну и мир» под видом программного кода. Он выдаст ошибки, но это будут ошибки PHP. Их можно будет просто поправить, и всё заработает — «Война и мир» с самого начала была кодом на PHP, просто с ошибками была написана.
И раз синтаксис становится субъективным, то у него такое же право влиять на принадлежность к языку, как и у стилей, используемых парадигм, паттернов и т.п. Единственный объективный признак — контекст исполнения (пока не доказано обратное). :)
У меня один знакомый, кстати, часто использует $ в имени переменных на JS. Для него это типично. Я не понимаю до конца, чем он руководствуется при этом, потому что переменные без доллара он тоже использует рядом, но, в общем-то, его код работает нормально и ошибок не выдаёт.
Вот видите, вы употреблятете выражения «с большей вероятностью», «нетипично», «необязательно», «может». Они выдают предположение об истинной принадлежности, но не истинную принадлежность, доказанную объективными признаками. С их помощью нельзя точно сказать, что вот этот код написан на языке А, а этот — на языке Б. Но с помощью синтаксиса и слов языка — можно.
Если код на языке А синтаксически корректен, то никто не сможет оспорить, что этот код истинно является кодом на языке А — он работает. Даже если он написан с использованием каких-то стилей, паттернов и парадигм языка Б, невозможно оспорить, что он имеет право быть кодом на языке А. И кодом на языке Б он не станет только из-за того, что в нём используются парадигмы и стили из языка Б. Он им станет только если его синтаксис корректен для языка Б. Субъективные признаки дадут возможность сделать предположение о том, что код с определённой вероятностью принадлежит к языку Б. Но если по синтаксису этот код не является Б, он им не станет, даже если субъективных признаков будет миллион, а в каждом блоке комментариев в коде будет пометка, что это код на языке Б.
Я это всё веду к тому, что я критерии различия указываю, и объясняю, почему они помогают различать вещи. Но меня оспаривают тем, что есть куча других критериев, и не объясняют, как именно они помогают различать вещи.
Ситуация, когда один и тот же код работает в нескольких интерпретаторах, мои слова не опровергает, потому что в то же самое время не находится каких-то других критериев, которые гарантированно покажут различие.
Я не утверждаю, что любой вообще код можно различить, опираясь на синтаксис и слова, ведь существует код, который может работать и там и там. Я говорю про то, что не требуется дополнительных критериев, чтобы оценивать принадлежность. И если в коде используются идиомы, характерные для языка A, но он работает в языке Б, у него одинаковое право быть кодом как на языке A, так и на языке Б. Но если будет различаться синтаксис, то у него не будет возможности быть одновременно кодом на языке А и на языке Б.
А у вас нет, кстати, какого-нибудь примера, который покажет, что по синтаксису и словам нельзя определить, что это конкретный язык, а по другим признакам можно? Просто посмотреть на код и с уверенностью утверждать, что это код на каком-то конкретном языке, но не из-за синтаксиса и слов, а из-за других признаков.
Я согласен, что конструкция for, которую вы приводили, может работать и в PHP и в JS. Но вы сами сможете её отнести к конкретному языку, руководствуясь какими-то ещё признаками, которые выходят за рамки моих утверждений про синтаксис и слова?
Вы ведь это мне хотите показать — то, что я заблуждаюсь про только синтаксисическо-словесную разницу для определения принадлежности?
Это читерство, я считаю. Потому что, например, знак «=» может использоваться в большинстве языков программирования. Если я вас попрошу угадать, что делает этот код: =, что вы скажете? Присваивает что-нибудь? А я вам отвечу после вашего ответа: «а с чего вы взяли, ведь он являлся частью конструкции ==».
На JavaScript. А на PHP он интерпретироваться не будет — потому что код на PHP должен содержать <?php перед кодом по синтаксису. Если это добавить явно, это уже будет ошибкой при интерпретации на JavaScript. То есть, условие про одинаковый текст, который работает в обоих интерпретаторах, не выполняется.
А мне интересны объективные признаки, а не субъективные. Какой нам тогда смысл вообще спорить, если я про цвет говорю, а вы — про расстояния? Он же ни к чему не приведёт — только к раздажению.
Тогда, если уж мы про формулировки говорим, то вы спрашивали только про синтаксис, а я сказал, что это синтаксис и слова. То есть, к простому «да», мой ответ тоже нельзя свести. Логично ведь?
… и если этот ответ «да», то я не могу с ним согласиться. Языки можно (иногда) отличать по синтаксису, но отличаются они не только синтаксисом.
Можно обратиться к тому, как работает интерпретатор языка, чтобы понять, что остальные признаки — это результат восприятия конкретного человека, а не объективный признак языка. Всякие идиомы в первую очередь должны быть синтаксически верны. Интерпретатор делает синтаксический анализ. Была идиома или нет — интерпретатор выдаст ошибку, если синтаксис неправильный, или если встречается некорректное для этого языка слово.
… и если этот ответ «да», то я не могу с ним согласиться. Языки можно (иногда) отличать по синтаксису, но отличаются они не только синтаксисом.
Они отличаются в своей полезности многими параметрами, но понимать, что вот здесь один язык, а там — другой, можно по синтаксису и по использованным словам. Всё дело в формулировках. Вы выбрали такую формулировку вопроса — мой ответ в неё хорошо укладывается.
Вот здесь я про это писал. Дополнительно, я это ещё раз процитирую.
(Я боюсь, что наше основное разногласие — в критериях профессионального владения)
Я думаю, вы просто в какой-то момент по инерции начали думать, что я называю профессиональным владением ситуацию, когда человек не лазает в документацию. Я повторюсь, иногда я считаю, что можно не придираться к словам человека, чтобы перейти к сути и не плодить слишком много текста. У каждого человека своё видение того, что значит профессионализм. На тот момент, я услышал, что одним из граничных условий является: «на более-менее профессиональном уровне. Чтобы просто писать не задумываясь, а не нырять в справочник каждые пять минут». У меня эта фраза не вызывает достаточно отторжения, чтобы тыкать человека в его ошибки. Зато она добавляет конкретики, на которую можно опираться. В противном случае, мы с ним ещё пару дней бы спорили, что такое «профессиональное владение» — и это была бы пустая трата времени. Это не позволило бы сразу взять и начать что-то оценивать.
Знание точных наук, алгоритмическое мышление, способности к математике и анализу. И прочее, и прочеее, и прочее. И куча всего остального, не относящегося к конкретному языку программирования вообще. Вот, это моё мнение про профессионализм. Оно может быть неправильным, но я не буду спорить об этом.
Я имел ввиду:
count($data) == 1
— опечатался. Когда fgetcsv встречает пустую строку, он делает массив:[null]
.Его можно дополнительно адаптировать к запуску из web (добавив set_time_limit и заменив PHP_EOL на <br>) — секунд за 20 это можно сделать. А так, он уже готов из консоли работать.
Вы привели простейший пример того, что, по вашему мнению, истинную принадлежность выдаёт стиль, используемые парадигмы, паттерны и т. п. По моему мнению, это необъективные признаки. Для меня пример выглядит некорректным, потому что в его сути лежат субъективные явления.
Ну да. Никто ведь ведь не в курсе, какие задумки были у прокладки между клавиатурой и стулом. Можно авторитено заявить, что это язык А, потому что у него корректный синтаксис для этого языка. Если синтаксис верен, то можно уверенно говорить, что это язык А. Если синтаксис неверен, никакие другие субъективные признаки не дадут 100%-й уверенности, что это код на языке А. Это может быть «вероятно, код на А» или «скорее всего, код на А», или «с очень большой вероятностью, код на А», но не определённо точно код на языке А.
Вот для примера:
Объективно, это код на PHP. Из комментариев понятно, что нужно сварить щи, но код этого не делает. И, если ещё подумать, он работает не так, как задумывалось, потому что восклицательные знаки не выводятся. Он от этого разве перестанет быть кодом на PHP?
Ну да, будет считаться кодом на PHP. Просто будет ругаться на что-нибудь вроде «Object of class XXX could not be converted to string» (если не существует XXX::__toString()). Это не синтаксическая ошибка. Это оператор конкатенации (в ваших обстоятельствах, во всяком случае, когда вы поменяли «->» на точку), который является частью синтаксиса PHP. В то же самое время, он будет считаться кодом на JavaScript.
Мне, вам, кому-то ещё третьему-четвёртому-пятому можно считать этот код только кодом на PHP и говорить, что это стопроцентно не код на JavaScript, если это нужно. Но это субъективное мнение, которое объективным признаком не может стать.
Вот, например:
Я считаю это кодом на JavaScript. Оппонент считает это кодом на PHP. И оба мы правы, потому что нет объективных признаков, чтобы стопроцентно отнести этот код к одному языку. Но мы можем спорить, что $ — признак PHP, или что в JS нет trim (я на это отвечу то же самое, что вы мне сказали чуть раньше). И всё равно мы оба останемся правы, потому что со стопроцентной уверенностью можно будет сказать что-то о принадлежности к конкретному языку только после того, как из объективных признаков это станет точно известно. Нетипичность использования $ в JS и то, что оппонент лично код написал на PHP — это субъективные признаки. Он может через несколько минут передумать и сказать, что писал на самом деле на JS — и этот аргумент будет таким же субъективным как и тот, где говорилось про PHP — и это не добавит ровным счётом ничего к объективным оценкам (не убавит тоже, кстати).
* * *
Если совсем хорошо подумать, то синтаксис, за который я так упорно цепляюсь, тоже не может быть объективным признаком, потому что можно интерпретатору PHP скормить «Войну и мир» под видом программного кода. Он выдаст ошибки, но это будут ошибки PHP. Их можно будет просто поправить, и всё заработает — «Война и мир» с самого начала была кодом на PHP, просто с ошибками была написана.
И раз синтаксис становится субъективным, то у него такое же право влиять на принадлежность к языку, как и у стилей, используемых парадигм, паттернов и т.п. Единственный объективный признак — контекст исполнения (пока не доказано обратное). :)
Если код на языке А синтаксически корректен, то никто не сможет оспорить, что этот код истинно является кодом на языке А — он работает. Даже если он написан с использованием каких-то стилей, паттернов и парадигм языка Б, невозможно оспорить, что он имеет право быть кодом на языке А. И кодом на языке Б он не станет только из-за того, что в нём используются парадигмы и стили из языка Б. Он им станет только если его синтаксис корректен для языка Б. Субъективные признаки дадут возможность сделать предположение о том, что код с определённой вероятностью принадлежит к языку Б. Но если по синтаксису этот код не является Б, он им не станет, даже если субъективных признаков будет миллион, а в каждом блоке комментариев в коде будет пометка, что это код на языке Б.
Без него тоже можно интерпретировать код как PHP.
Ситуация, когда один и тот же код работает в нескольких интерпретаторах, мои слова не опровергает, потому что в то же самое время не находится каких-то других критериев, которые гарантированно покажут различие.
Я не утверждаю, что любой вообще код можно различить, опираясь на синтаксис и слова, ведь существует код, который может работать и там и там. Я говорю про то, что не требуется дополнительных критериев, чтобы оценивать принадлежность. И если в коде используются идиомы, характерные для языка A, но он работает в языке Б, у него одинаковое право быть кодом как на языке A, так и на языке Б. Но если будет различаться синтаксис, то у него не будет возможности быть одновременно кодом на языке А и на языке Б.
Я согласен, что конструкция for, которую вы приводили, может работать и в PHP и в JS. Но вы сами сможете её отнести к конкретному языку, руководствуясь какими-то ещё признаками, которые выходят за рамки моих утверждений про синтаксис и слова?
Вы ведь это мне хотите показать — то, что я заблуждаюсь про только синтаксисическо-словесную разницу для определения принадлежности?
=
, что вы скажете? Присваивает что-нибудь? А я вам отвечу после вашего ответа: «а с чего вы взяли, ведь он являлся частью конструкции ==».Можно обратиться к тому, как работает интерпретатор языка, чтобы понять, что остальные признаки — это результат восприятия конкретного человека, а не объективный признак языка. Всякие идиомы в первую очередь должны быть синтаксически верны. Интерпретатор делает синтаксический анализ. Была идиома или нет — интерпретатор выдаст ошибку, если синтаксис неправильный, или если встречается некорректное для этого языка слово.
Они отличаются в своей полезности многими параметрами, но понимать, что вот здесь один язык, а там — другой, можно по синтаксису и по использованным словам. Всё дело в формулировках. Вы выбрали такую формулировку вопроса — мой ответ в неё хорошо укладывается.
Вот здесь я про это писал. Дополнительно, я это ещё раз процитирую.