Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: вывод объявлений из Ворда, с подсчетом их количества.
 
 автор: ronin   (31.08.2006 в 18:21)   письмо автору
 
 

Здравствуйте! Представте себе ситуацию: нужен вывод объявлений газеты, объявления вносяться раз в неделю, все вместе, по рубрикам, , возможно ли подсчитывать объявления, которые вносяться группой(первое слово, каждого объявления с большой буквы), отделять объявления друг от друга. Те. мне понятно как это сделать если объявлению вносяться он-лайн, и отдельно, но когда админом и 20 объявлений. Прошу помощи.

   
 
 автор: kasmanaft   (31.08.2006 в 19:21)   письмо автору
 
   для: ronin   (31.08.2006 в 18:21)
 

Во-первых, из Word'a объявления вытащить не получится, если вопрос в этом - там все зашифровано ... я чессн сказать не совсем понял суть вопроса :(

Есть файл (БД или еще чего), оттуда нужно взять текст (неразделенные объявления) и разледить их, так? Объявление - это текст от большой буквы и до точки?
// (первое слово, каждого объявления с большой буквы)

   
 
 автор: targa   (31.08.2006 в 21:40)   письмо автору
 
   для: kasmanaft   (31.08.2006 в 19:21)
 

>Во-первых, из Word'a объявления вытащить не получится, если вопрос в этом - там все зашифровано
Ничего там не зашифровано. Можно вытащить. Есть несколько вариантов.

>я чессн сказать не совсем понял суть вопроса
Я тоже :). Перечитал 2 раза но так токлом не понял в чем проблема.

   
 
 автор: ronin   (01.09.2006 в 10:17)   письмо автору
 
   для: targa   (31.08.2006 в 21:40)
 

объявления храняться в ворде, потом их закидывают, к примеру в БД Мускул все вместе, из которой вытягивают на сайт, но как при этом проводить подсчет... Да, объявление начинается с болшой буквы и заканчиваються точкой. Сорри за сумбур, спасибо!

   
 
 автор: targa   (01.09.2006 в 11:29)   письмо автору
 
   для: ronin   (01.09.2006 в 10:17)
 

Вариантов может быть два.

Вариант 1.
Делаете SaveAs в Ворде, сохраняете файл как хтмл. Потом разбираете его регулярными выражениями. Можно попробовать Save As текст, и тоже разбирать регулярками.
Хорошо тем, что сможете закинуть такой html/txt на хостинг и там разбирать (т.е. сможете написать конвертер на РНР).

Вариант 2.
Пишете на Сях, Делфях или Васиках конвертер. В нем через COM создаете объект класса Word.Application и обходя коллекцию параграфов, вытаскиваете текст из ворда. В принципе такое и на JS можно сделать, но думаю тормозить будет не по-детски (работа через COM идет медленно, .DOC с 11000 параграфов, перегонялся в dbf почти 70 минут /Athlon 2600 512Mb WinXPSP2/).
Мне например такой вариант проще - больший контроль над входными данными (можно вообще через коллекцию chars работать и тащить побуквенно :)), но сделать такое сможете или у себя или если у вас Win-хостинг.

   
 
 автор: ronin   (01.09.2006 в 12:31)   письмо автору
 
   для: targa   (01.09.2006 в 11:29)
 

Я человек темный, подскажите насчет конвертера в ПХП, правда спасибо за помощь, буду хотя бы знать чего искать:)

   
 
 автор: targa   (01.09.2006 в 13:56)   письмо автору
 
   для: ronin   (01.09.2006 в 12:31)
 

Ну общий принцип если на РНР то примерно так:
- в Ворде сохраняем нужный файл, как HTML или TXT (в принципе не особо важно);
- запускаем РНР-скрипт;
- скрипт открывает html/txt и читает содержимое в переменную

$lcContent=file_get_contents('my_file.htm');


- если это html, то функцией preg_Match_All разбираем содержимое (паттерны придется определять опытным путем);
- получившийся массив если нужно подчищаем, в цикле пробегаемся и загоняем в БД;

- если это txt (и вы не соврали насчет того, что все объявления заканчиваются на точку и каждое объявление состоит всего из одного предложения) то точно также читаем файл в переменную($lcContent=file_get_contents('my_file.htm'););
- теперь делаем так

$laObyav=explode('.', $lcContent);

- получившийся массив если нужно подчищаем, в цикле пробегаемся и загоняем в БД;

Вот примерно так.
Хотя может если у вас там объявления вводят в Ворд имеет смысл сменить организацию данных? Если делаете это постоянно, то имеет смысл написать простенькую программку для ввода данных, можно на чем-нибудь эээ простеньком типа МС Абсцесса.
Хотя даже переход с Word'f на Excel упростит жизнь - сделали экспорт в csv и дальше делайте с данными че хотите.

   
 
 автор: ronin   (01.09.2006 в 17:39)   письмо автору
 
   для: targa   (01.09.2006 в 13:56)
 

я перевариваю информацию отвучу позже, спасибо!

   
 
 автор: ronin   (04.09.2006 в 11:52)   письмо автору
 
   для: targa   (01.09.2006 в 13:56)
 

Т.е. при закидывание а БД Мускул, код приблизительно такой? можно сделать страницу администрирования, и указывать рубрику $rubrica.Но как это все объеденить? Помогите!


$lcContent=file_get_contents($text); 
$laObyav=explode('.', $lcContent);
$query = "insert into table ( text,rubrica) values
('".$text."', '".$rubrica."' )";
 

При этом при выводе

$result = mysql_query("SELECT text, rubrica FROM table WHERE rubrica= '".$_GET['rubrica']."' ORDER BY LIMIT $start, $num"); 


$result = mysql_query("SELECT * FROM table WHERE rubrica= '".$_GET['rubrica']."'
$num_results = mysql_num_rows($result);
echo Количество объявлений : '.$num_results.'';?>


   
 
 автор: targa   (04.09.2006 в 16:21)   письмо автору
 
   для: ronin   (04.09.2006 в 11:52)
 

Грубо я бы так делал (в реале было бы все не в одно файле а каждое в своем php в php, js в js и т.д.)


<?php

    $lcFile
=strVal($_POST['txtFile']);
    
$lnRubr=intVal($_POST['cboRubr']);

    if(!empty(
$lcFile) && $lnRubr>0)
    {
        
$lcContent=file_get_contents($lcFile);
        
$laObyav=explode('.'$lcContent);
        for (
$i=0$i count($laObyav); $i++)
        {
            
$lcQuery "insert into table (text, rubrica) values ('".$laObyav[$i]."', '".$lnRubr."' )";
            
mysql_query($lcQuery)
        }
    }
?>

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>пример</title>
<script language="javascript" type="text/javascript">
<!--
function _check(toForm)
{
    if (toForm.txtFile.value == "") { alert('Укажите файл для обработки'); toForm.txtFile.focus(); return false;}
    if (toForm.cboRubr.value == 0) { alert('Выберите рубрику!'); toForm.cboRubr.focus(); return false;}
    return true;
}
//-->
</script>
<style type="text/css">

input.txt { width: 300px; }
select.cbo { width: 160px; }

</style>
</head>

<body>

<form method="post" action="file1.htm" onsubmit="_check(this)">
<input type="text" name="txtFile" class="txt">
<br />
<select name="cboRubr" size="1" class="cbo">
    <option selected value="0">не выбрана</option>
    <option value="1">Недвижимость</option>
    <option value="2">Автомобили</option>
</select>
<br />
<input type="submit" value="обработка" name="cmdRun">
</form>

</body>

</html>


После выполнения:

$result = mysql_query("SELECT text, rubrica FROM table WHERE rubrica= '".$_GET['rubrica']."' ORDER BY LIMIT $start, $num");
$num_results = mysql_num_rows($result);

У вас в $num_results - количество объявлений в рубрике.
Хотя для получения просто кол-ва строк лучше использовать запрос типа

SELECT COUNT(*) AS count1 FROM table WHERE runbrica=1

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования