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

Форум PHP

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

 

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

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

тема: Пунктуация php
 
 автор: gNEV   (16.01.2007 в 23:31)   письмо автору
 
 

Здравствуйте всем! :)
Маленькое отступление, чтобы было понятно. Много лет пишу на Паскале, в Дельфях. Работаю с базами данных. На днях резко возникла необходимость написать самому некие скрипты на php. Зашел на этот замечательный сайт, прочитал самоучитель (кстати большое спасибо авторам! Замечательно написано, доходчиво и ясно! :) ). В осях все понятно (как говориться - буквы те же... :) ), но... Некоторые моменты остались вне моего понимания. В частности: есть пример
     <?
       $date 
"august 10 2003";
       list(
$month$day$year) = sscanf($date"%s %d %d");
       echo(
"Date: $day-".substr($month,0,3)."-$year");
    
?>

Абсолютно не понял, для чего substr($month,0,3) заключено в точки? Что вообще представляет из себя точка в php? Видел такой скрипт:
$message=$body;
$message .=$adding;

Тут вроде как ясно, точки показывают, что присоединяется кусок текста (вроде объединения строк), а где еще используются точки?
То же самое и с другими знаками препинания. Для чего используются знаки вопроса, слэши, плюсы, знаки равенства по два три раза подряд, знаки "=>" или "->"? Чем отличаются парные кавычки от одинарных, скобки фигурные, квадратные, круглые? Ну в принципе суть вопроса понятна, азы так сказать... Возможно я и не доглядел чего-то в учебнике, не обессудьте, но есть большое пожелание авторам написать (по возможности конечно :) ) пунктуацию языка. Или направьте меня на путь истинный в направлении где взять инфу именно по пунктуации (с прочим вопросов не возникло). :)
Теперь более конкретно.
Задача:
Из текстового файла перенести текст в базу (MySQL).
Файл имеет формат:

12345пробелАБВпробел12345пробелАБВ // 12345 и АБВ это просто первое что пришло в голову, это текстовые поля с разными значениями.

некоторых элементов может не быть, т.е. следующие строки файла могут выглядеть так

12345пробел12345 (нет первых АБВ и последних АБВ)

12345пробелАБВпробелАБВ (нет последних АБВ)
и т.п. Критериев есть два: Поля АБВ содержат только буквы, поля 12345 начинаются только с цифры (могут и с нуля), но дальше могут встречаться любые знаки.
Пример строки: 12-12 АПС 23+89 ЛДГ
Поля таблицы, условно а1,b1,c1,d1 (четыре поля)должны быть заполнены в любом случае (либо пробелом, либо пустым значением), но в строгом соответствии: в поле a1 должно попасть первое 1234, в поле b1 первое АБВ, в поле с1 второе 12345 и в поле d1 второе АБВ. Тупик оказался в том, что не разложить каждую строку в соответствующие поля.
Первый проход выполняется нормально (см.код), в строке файла есть все четыре значения. Второй проход затыкается, т.к. в переменной $p1 должен (но не оказывается) оказаться пробел или пустое значение(в тексте нет этого значения), и только в переменную $t2 должно попасть 12345(по условию) и т.д. Т.е. строки со всеми значениями залетают нормально, а вот если нет хотя бы одного значения начинается бардак.

$file_array = file("xxx.txt");
  if(!$file_array)
  {
    echo("Ошибка открытия файла");
  }
  else
  {
    $query = "DELETE FROM yyyy"; //очищаем таблицу (она уже открыта, это часть кода)
    $result = mysql_query($query)   or die(mysql_error().'<br>'.$query);  //выполняем запрос
   
    for($i=0; $i < count($file_array); $i++)  // это из учебника (не понял опять же зачем два раза плюс?)
    {
    $str = sscanf($file_array[$i],"%s %s %s %s",&$t1, &$p1, &$t2, &$p2); //решил использовать эту функцию, показалось, что для моей задачи больше подходит

    $query = "INSERT INTO yyyy SET
                time_otspb = '".$t1."',  //опять же не понял зачем переменные в точках? поставил по аналогии
                prim_otspb = '".$p1."',
                time_vspb = '".$t2."',
                prim_vspb = '".$p2."'";
   $result = mysql_query($query)   or die(mysql_error().'<br>'.$query);
   $t1='';$p1='';$t2='';$p2=''; //обнулял пременные, может есть лучше способ?
    }

По идее надо действовать по такому пути. Проверять соответствует ли текст в переменной буквенному значению (или начальной цифре) и если нет, то дальше перекидывать значения. Но вот знания азбуки морзе php начинают подводить! :) Подтолкните опять в нужную сторону, на ум пока приходит что-то типа

$str = sscanf($file_array[$i],"%s %s %s %s",&$t1, &$p1, &$t2, &$p2);
if($p1!="[А-Я]") {$p2=$t2; $t2 = $p1; $p1=" ";}; //'это грубо конечно, но в осях.... и к тому же правильно не работает :)


Буду премного благодарен за любую посильную помощь! Только сразу в НЕ нужном направлении не посылайте! :)
С уважением Евгений aka gNEV.

   
 
 автор: Sergey89   (16.01.2007 в 23:39)   письмо автору
 
   для: gNEV   (16.01.2007 в 23:31)
 

[поправлено модератором]

   
 
 автор: gNEV   (17.01.2007 в 00:17)   письмо автору
 
   для: Sergey89   (16.01.2007 в 23:39)
 

Просто замечательное направление! :)
А зачем тогда этот сайт, форум, если у нас на все про все есть мануал! :)
Я почти 20 лет изучаю всевозможные мануалы по различным языкам программирования, базам данных и т.п., видимо тут какой-то особенный мануал, пойду гляну... ;)

   
 
 автор: Sergey89   (17.01.2007 в 00:23)   письмо автору
 
   для: gNEV   (17.01.2007 в 00:17)
 

Я тоже себя часто об этом спрашиваю. И понял, что они нужны для того, чтобы разбиратсять с тем, чего нет в мане. ;-) А в этом мане есть почти все, точнее это все в пользовательских комментариях. Сам всегда все ответы нахожу в мане, а на форумах спрашиваю в крайних случаях.

   
 
 автор: gNEV   (17.01.2007 в 01:54)   письмо автору
 
   для: Sergey89   (17.01.2007 в 00:23)
 

Да мануал однако хорош! :)
Теперь все стало ясно, правда так толком и не нашел два момента (символы -> и =>). Ну второй вроде для присваивания значений в массивах, а первый?

Все, решил свою задачку... :) Кривовато конечно, но работает :)

$str = sscanf($file_array[$i],"%s %s %s %s",&$t1, &$p1, &$t2, &$p2);
if(ord($p1)>=48 and ord($p1)<=57){$t2=$p1; $p1='';};

   
 
 автор: XPraptor   (17.01.2007 в 05:36)   письмо автору
 
   для: gNEV   (17.01.2007 в 01:54)
 

Символы => правильн рещил, для разделения ключ=>значение массива. Потому как PHP поддерживает ассациативные массивы ($ar["key_text_name"]=2; $ar["key_text_name1"]="text_value";)
Символы -> для разделения свойств и методов объявленных членов класса.


//это сам класс как объект
class test_class(){
 //это глобальная переменная класса
 $_global_variable1=22;
  
  //это метод класса
  function open_class(){
    //$this используется как указатель на этот класс (типа Me)
    $this->_global_variable1 = 33;
  }
}

$testcls=test_class();
print $testcls->_global_variable1; //пока 22
$testcls->open_class();
print $testcls->_global_variable1; //уже 33


$++, $i-- обычный инкремент декремент в цикле (на C так он и делается, а в VB Delphi $i=$i+1)

Кавычки очень сильн различаются, осторожно с ними. В одинарных кавычках все воспринимается как строка и не работают переменные. В двойных можно ставить переменные не разрывая строку точками:


$var1=22;
$test='это тест одиночных $var1'; //так и напишет $var1
$test1="это тест двойных var1"; //напишет текст и 22 в конце

   
 
 автор: cheops   (17.01.2007 в 15:13)   письмо автору
 
   для: gNEV   (16.01.2007 в 23:31)
 

>Абсолютно не понял, для чего substr($month,0,3) заключено в точки?
Точка в PHP - это символ объединения подстрок - точками мы объединяем подстроки в единую строку.

   
 
 автор: cheops   (17.01.2007 в 15:16)   письмо автору
 
   для: gNEV   (16.01.2007 в 23:31)
 

>Чем отличаются парные кавычки от одинарных, скобки фигурные, квадратные, круглые?
Про кавычки можно почитать в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=130.
Фигурные скобки - это аналог begin и end для Pascal
Круглые скобки имеют тоже значение, что и для Pascal

   
 
 автор: Sergey89   (17.01.2007 в 15:22)   письмо автору
 
   для: cheops   (17.01.2007 в 15:16)
 

+ фигурные скобки для того, чтобы отделить такое понятие как символ строки от элемента массива.

<?php
$str = 'Привет!';
print $str{0}; // хотя можно и $str[0]; Выведет: П
?>

   
 
 автор: kasmanaft   (17.01.2007 в 16:00)   письмо автору
 
   для: Sergey89   (17.01.2007 в 15:22)
 

Угу, и еще ... даже не знаю как его назвать:

<?
$str
['word'] = 'Привет!';
print 
"{$str['word']}";
?>

   
 
 автор: Sergey89   (17.01.2007 в 16:02)   письмо автору
 
   для: kasmanaft   (17.01.2007 в 16:00)
 

Сложный (фигурный) синтаксис =)
http://www.php.net/manual/ru/language.types.string.php

   
Rambler's Top100
вверх

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