ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

05.12.2008, 18:05
|
|
Познающий
Регистрация: 21.01.2007
Сообщений: 69
Провел на форуме: 211655
Репутация:
4
|
|
А как такой вариант решения первого вопроса: <?php
$file = $_POST['file'];
$csv_lines = file("book1.csv");
if(is_array($csv_lines))
{
//разбор csv
$cnt = count($csv_lines);
for($i = 0; $i < $cnt; $i++)
{
$line = $csv_lines[$i];
$line = trim($line);
//указатель на то, что через цикл проходит первый символ столбца
$first_char = true;
//номер столбца
$col_num = 0;
$length = strlen($line);
for($b = 0; $b < $length; $b++)
{
//переменная $skip_char определяет обрабатывать ли данный символ
if($skip_char != true)
{
//определяет обрабатывать/не обрабатывать строку
///print $line[$b];
$process = true;
//определяем маркер окончания столбца по первому символу
if($first_char == true)
{
if($line[$b] == '"')
{
$terminator = '";';
$process = false;
}
else
$terminator = ';';
$first_char = false;
}
//просматриваем парные кавычки, опредляем их природу
if($line[$b] == '"')
{
$next_char = $line[$b + 1];
//удвоенные кавычки
if($next_char == '"')
$skip_char = true;
//маркер конца столбца
elseif($next_char == ';')
{
if($terminator == '";')
{
$first_char = true;
$process = false;
$skip_char = true;
}
}
}
//определяем природу точки с запятой
if($process == true)
{
if($line[$b] == ';')
{
if($terminator == ';')
{
$first_char = true;
$process = false;
}
}
}
if($process == true)
$column .= $line[$b];
if($b == ($length - 1))
{
$first_char = true;
}
if($first_char == true)
{
$values[$i][$col_num] = $column;
$column = '';
$col_num++;
}
}
else
$skip_char = false;
}
}
}
var_dump($values);
?>
|
|
|

19.01.2009, 00:32
|
|
Познающий
Регистрация: 21.01.2007
Сообщений: 69
Провел на форуме: 211655
Репутация:
4
|
|
Так никто не возьмется?
|
|
|

19.01.2009, 03:16
|
|
Познающий
Регистрация: 23.09.2007
Сообщений: 75
Провел на форуме: 938032
Репутация:
86
|
|
dk-ne, опиши подробнее.
из того что ты написал я понял след.:
исходные данные хранятся в файле xls. В таблице две колонки: первая с какими-то данными, вторая содержит ФИО, разделенные пробелами.
Нужно:
1. сделать форму, через которую этот самый файл .xls загружается на сервер
2. распарсить данные из файла: 1-й столбец добавить в 1-й столбец в базе данных, а 2-й разбить на три столбца (фамилия имя отчество) и также тремя столбцами занести в базу данных.
т.е. было в файле |Данные|ФИО|, а стало в базе данных так |Данные|Фамилия|Имя|Отчеств о|
если так то держи
Последний раз редактировалось t4Nk; 19.01.2009 в 17:09..
|
|
|

20.01.2009, 19:57
|
|
Познающий
Регистрация: 21.01.2007
Сообщений: 69
Провел на форуме: 211655
Репутация:
4
|
|
Сообщение от t4Nk
dk-ne, опиши подробнее.
из того что ты написал я понял след.:
исходные данные хранятся в файле xls. В таблице две колонки: первая с какими-то данными, вторая содержит ФИО, разделенные пробелами.
Нужно:
1. сделать форму, через которую этот самый файл .xls загружается на сервер
2. распарсить данные из файла: 1-й столбец добавить в 1-й столбец в базе данных, а 2-й разбить на три столбца (фамилия имя отчество) и также тремя столбцами занести в базу данных.
т.е. было в файле |Данные|ФИО|, а стало в базе данных так |Данные|Фамилия|Имя|Отчеств о|
если так то держи
Все правильно. Сейчас проверю и отпишусь...
|
|
|

20.01.2009, 20:19
|
|
Познавший АНТИЧАТ
Регистрация: 12.03.2008
Сообщений: 1,379
Провел на форуме: 5866479
Репутация:
1809
|
|
dk-ne, я делал так, экспортировал из Excel в CSV формат, кидал на хост в папку и парсером выводил на сайте.
PHP код:
<?php
include("admin/config.php");
$result = mysql_query ("SELECT `csv` FROM `doc_cl` WHERE `id`='".$id."'");
$row = mysql_fetch_array ($result);
if($row["csv"]!=""){
echo '<div style="margin:20px 0px 0px 0px;">';
echo '<table width="100%" border="0" cellspacing="1" cellpadding="2" bgcolor="#000000">';
$r = 0;
@$handle = fopen("docs/".$row["csv"], "r");
if($handle){
while (($data = fgetcsv($handle, '1000', '#', '"')) !== FALSE) {
$num = count($data);
//print_r ($data);
//echo "<p> $num полей в строке $row: <br /></p>\n";
$r++;
for ($c=0; $c < $num; $c++) {
$pieces = explode(";", $data[$c]);
$num_td= count($pieces)-1;
//echo $num_td;
if($r==1){
echo '<tr><td class="td2" height="40" align="center" width="*" style="font-weight:bold;">'.$pieces[0].'</td>';
for ($i2 = 0; $i2 < $num_td; $i2++) {
echo'<td class="td2" align="center" width="13%" style="font-weight:bold;">'.$pieces[$i2+1].'</td>';
}
echo'</tr>';
}
if (is_int($r/2) && $r!=1) {
echo '<tr><td class="td1" style="padding-left:20px;">'.$pieces[0].'</td>';
for ($i = 0; $i < $num_td; $i++) {
echo'<td class="td1" align="center">'.$pieces[$i+1].'</td>';
}
echo'</tr>';
}
if (!is_int($r/2) && $r!=1) {
echo '<tr><td class="td2" style="padding-left:20px;">'.$pieces[0].'</td>';
for ($i = 0; $i < $num_td; $i++) {
echo'<td class="td2" align="center">'.$pieces[$i+1].'</td>';
}
echo'</tr>';
}
} // for
}//while
//fclose($handle);
echo'</table>';
}//if($handle)
echo '</div>';
}
?>
на поковыряй, вот стили:
Код HTML:
.td1{background-color:#f0ece8;}
.td2{background-color:#ffffff;}
|
|
|

31.01.2009, 05:56
|
|
Познающий
Регистрация: 21.01.2007
Сообщений: 69
Провел на форуме: 211655
Репутация:
4
|
|
Сообщение от t4Nk
dk-ne, опиши подробнее.
из того что ты написал я понял след.:
исходные данные хранятся в файле xls. В таблице две колонки: первая с какими-то данными, вторая содержит ФИО, разделенные пробелами.
Нужно:
1. сделать форму, через которую этот самый файл .xls загружается на сервер
2. распарсить данные из файла: 1-й столбец добавить в 1-й столбец в базе данных, а 2-й разбить на три столбца (фамилия имя отчество) и также тремя столбцами занести в базу данных.
т.е. было в файле |Данные|ФИО|, а стало в базе данных так |Данные|Фамилия|Имя|Отчеств о|
если так то держи
С маленькими таблицами работает хорошо. При большой таблице, как у меня, пишет, что File not exist. Хотя файл загружает.
|
|
|

31.01.2009, 19:18
|
|
Познающий
Регистрация: 23.09.2007
Сообщений: 75
Провел на форуме: 938032
Репутация:
86
|
|
dk-ne, если возможно, выложи пример своей таблицы.
|
|
|

01.02.2009, 02:13
|
|
Познающий
Регистрация: 21.01.2007
Сообщений: 69
Провел на форуме: 211655
Репутация:
4
|
|
Сообщение от t4Nk
dk-ne, если возможно, выложи пример своей таблицы.
http://depositfiles.com/files/ixvgs2rst
сам понимаешь, что это не оригинал
|
|
|

01.02.2009, 13:34
|
|
Познающий
Регистрация: 23.09.2007
Сообщений: 75
Провел на форуме: 938032
Репутация:
86
|
|
Сообщение от dk-ne
http://depositfiles.com/files/ixvgs2rst
сам понимаешь, что это не оригинал
хм, на LightTPD/1.4.20-1; php 5.2.8 fcgi; MySQL 5.0.45 нормально добавились все строки.
в общем обновил класс, подправил немного сам скрипт, должно работать
http://depositfiles.com/files/05yo6vjf8
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|