From 4dff5b65ac3dc2e56db0a25cb8a20510372feed9 Mon Sep 17 00:00:00 2001 From: Lancer-Serega Date: Fri, 26 Aug 2016 11:17:17 +0300 Subject: [PATCH] Start development "CSV to XML" module --- convertcsv.csv | 15 +++++ files/data-example-4.csv | 15 +++++ index.php | 127 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 157 insertions(+) create mode 100644 convertcsv.csv create mode 100644 files/data-example-4.csv create mode 100644 index.php diff --git a/convertcsv.csv b/convertcsv.csv new file mode 100644 index 0000000..d081e9b --- /dev/null +++ b/convertcsv.csv @@ -0,0 +1,15 @@ +title,ns,id,revision/id,revision/parentid,revision/timestamp,revision/contributor/username,revision/contributor/id,revision/model,revision/format,revision/text/_xml:space,revision/text/_bytes,revision/text/__text,revision/sha1 +Page 1,0,1,18,17,2016-08-23T11:33:55Z,Lancer,1,wikitext,text/x-wiki,preserve,2384,"Содержимое страницы 1 + Содержимое страницы 1 + Содержимое страницы 1 + Содержимое страницы 1 + Содержимое страницы 1 + Содержимое страницы 1 + Содержимое страницы 1",9oooeehyyg1hxrla8qqqqndpqiu5yt4 +Page 2,0,2,18,17,2016-08-23T11:33:55Z,Lancer,1,wikitext,text/x-wiki,preserve,2384,"Содержимое страницы 2 + Содержимое страницы 2 + Содержимое страницы 2 + Содержимое страницы 2 + Содержимое страницы 2 + Содержимое страницы 2 + Содержимое страницы 2",9oooeehyyg1hxrla8qqqqndpqiu5yt4 diff --git a/files/data-example-4.csv b/files/data-example-4.csv new file mode 100644 index 0000000..d081e9b --- /dev/null +++ b/files/data-example-4.csv @@ -0,0 +1,15 @@ +title,ns,id,revision/id,revision/parentid,revision/timestamp,revision/contributor/username,revision/contributor/id,revision/model,revision/format,revision/text/_xml:space,revision/text/_bytes,revision/text/__text,revision/sha1 +Page 1,0,1,18,17,2016-08-23T11:33:55Z,Lancer,1,wikitext,text/x-wiki,preserve,2384,"Содержимое страницы 1 + Содержимое страницы 1 + Содержимое страницы 1 + Содержимое страницы 1 + Содержимое страницы 1 + Содержимое страницы 1 + Содержимое страницы 1",9oooeehyyg1hxrla8qqqqndpqiu5yt4 +Page 2,0,2,18,17,2016-08-23T11:33:55Z,Lancer,1,wikitext,text/x-wiki,preserve,2384,"Содержимое страницы 2 + Содержимое страницы 2 + Содержимое страницы 2 + Содержимое страницы 2 + Содержимое страницы 2 + Содержимое страницы 2 + Содержимое страницы 2",9oooeehyyg1hxrla8qqqqndpqiu5yt4 diff --git a/index.php b/index.php new file mode 100644 index 0000000..c93fcba --- /dev/null +++ b/index.php @@ -0,0 +1,127 @@ +' . $break; + + for($i = 0; $i < ARRAY_SIZE; $i++) { + if(!empty($key[$i])) { + $str .= $tab . $tab . '<' . $key[$i] . '>' . $value[$i] . '' . $break; + } + } + + $str .= $tab . '' . $break; + } + else if('json' === $type) { + $str = $tab . '{' . $break; + + for($i = 0; $i < ARRAY_SIZE; $i++) { + if($i !== 25) { + $str .= $tab . $tab . $key[$i] . "\":\"" . $value[$i] . "\"," . $break; + } + else { + $str .= $tab . $tab . $key[$i] . "\":\"" . $value[$i] . "\"" . $break; + } + } + + if($i !== 25) { + $str .= $tab . '},' . $break; + } + + else { + $str .= $tab . '}' . $break; + } + } + + return $str; +} + +$pathToModuleDir = __DIR__ . '\\files\\data-example-4.csv'; + +echo "Working... \n"; + +if(!empty($pathToModuleDir)) { + echo 'File exists'; +} +else { + echo 'File is not exists'; +} + +$handle = fopen($pathToModuleDir, "r"); +$keys = []; +$firstly = true; + +//$json = "{\n"; +$xml + = '' . "\n"; + +$xml .= $tab . '' . $break; +$xml .= $tab . $tab . '' . $break; + +if($handle !== false) { + + while(($data = fgetcsv($handle, 0, ',')) !== false) { + if($firstly) { + $keys = $data; + $firstly = false; + } + else if(!$firstly) { +// $json .= generate($keys, $data, 'json'); + $xml .= generate($keys, $data, 'xml'); + } + } + +// $json .= '}'; + $xml .= ''; + +// file_put_contents(JSON_FILE, $json); + file_put_contents(XML_FILE, $xml); + echo "Complete \n"; +} + +fclose($handle); + +/** + * Для решения данной задачи мне потребуется: + + * 1. Изучить XML, CSV файл и понять где какие же данные и на каком месте находятся. + * 2. Где находятся названия таблиц, где имена столбцов, а где находятся сами данные которые заполняются в данную + * таблицу + * 3. Написать парсер который будет парсить csv файл. + * 4. Написать подпрограмму которая будет создавать XML файл и параллельно с парсером сразу в него записывать (в + * случае ошибки все записанные в XML файл данные будут (опционально)уничтожены вместе с файлом) + * 5. "Подточить" данное приложение под mediawiki + * + * + * Принцып работы программы по шагам + * + * 1. Проверить csv файл на существование (если не существует то 1.1) + * 1.1 Вернуть ответ пользователю (Exception file is not found) + * 2. Скан символов в поиске "запятой" которая и будет разделителем сущностей + * б) Если при скане мы видим "\". Он будет являться разделителем вложенностей DOM + * в) Скан должен будет проверять построчно. + * 3. + * + */