dbase поле Data

  • Автор темы Автор темы hukola
  • Дата начала Дата начала

hukola

Новичок
dbase поле Data

пишу парсер dbf на пхп через dbase модуль. скрипт делает из одной две дбф по условию, столкнулся с проблемой при записи поля Дата, когда читаю возвращает строку - не могу ее загнать в аналогичную ячейку своей дбф, все остальные без проблем а дату не могу. Пробовал в число перегнать тоже самое. Мануалы перерыл, но найти примеров не могу. Может кто то сталкивался. В оригинале поле дата типа ymd так же пробовал записывать текущую дату date('ymd') но он тоже не записался смотрел dbview -e пишет у оригинального поля длину 8 а у моего созданного длину 0, в документации при создании не указывается ни длина не точность, что делать нз. подскажите.

$arr = array(
array("Date", "D"),
array("Co","C",6)
и т.д.
dbase_create("/tmp/dbase_t.dbf",$arr);
$dbt = dbase_open("/tmp/dbase_t.dbf",2);
далее в массив все значения и из оригинального файла, а из этого массива по условию в свой файл. Все кроме даты успешно

Язык менять не буду, систему тоже, работу тем более. Спасибо.
 
вполне возможно, это бага пхп
на bugs.php.net или гугле искал?
 
Выложи куда нить чтобы можно было испробывать у себя на сервере. Выложи dbf файл(просто любой) попытаемся. Все исходники выложи(относящиеся к проблеме)
 
Автор оригинала: Glazyrin Sergey
Выложи куда нить чтобы можно было испробывать у себя на сервере. Выложи dbf файл(просто любой) попытаемся. Все исходники выложи(относящиеся к проблеме)
PHP:
#!/usr/local/bin/php 
<?php if ($argv[1]){
$db = dbase_open($argv[1],0) OR DIE ('AHTUNG!');
 }else{     
echo ("Не указан входной файл!\n");      
}; 
$len = 7; //максимальная длина номера 

$def = array(
 	array("Date",'D'),
 	array("Co",'C',6),
 	array("Trunkgroup",'C',4),
 	array("Extension",'C',6),
 	array("Account",'C',6),
 	array("Number",'C',35),
 	array("Tenant", 'C',1),
 	array("Transfer", 'C',1),
 	array("Price", 'N',9,3),
 	array("Status", 'C',20),
	array("Iduration", 'N',5,0),
 	array("Itime", 'N',5,0),
 	array("Hand", 'C',1),
 	array("Calltype", 'C',1),
 	array("Trfgroup", 'N',1,0),
 	array("Zoneid",'N',6,0),
 	array("Currencyid", 'N',1,0),
 	array("Preflen1", 'N',2,0),
 	array("Preflen2", 'N',2,0),
 	array("Meterpulse", 'N',8,2),
 	array("Ringbefore", 'N',3,0),
 	array("Callerid", 'C',16),
 	array("Callmode", 'C',2)
 	    );
 	   if (!dbase_create('/home/hukola/123/valid.dbf',$def)) echo("#########################Ne mogu!\n");
 if (!dbase_create('/home/hukola/123/invalid.dbf',$def)) echo("#########################Ne mogu!\n");
  if (!dbase_open('/home/hukola/123/valid.dbf',2))
      {
 	echo("Не могу открыть valid\n"
);    
 }else{
 	$dbval = dbase_open('/home/hukola/123/valid.dbf',2);
 };
  if (!dbase_open('/home/hukola/123/invalid.dbf',2))
      {
 	echo("не могу открыть invalid\n");
     }else{
 	$dbinv = dbase_open('/home/hukola/123/invalid.dbf',2);
 };
  if ($db) {
     $record_numbers = dbase_numrecords($db);
     for ($i = 1; $i <=$record_numbers; $i++) {
 	$row  = dbase_get_record($db, $i);
 	$per = trim($row[5]);
 //	echo(date(strtotime($row[0]),"Ymd")."\n");
 	settype($row[0],"integer");
 	echo(gettype($row[0]));
 	$arr = array(
 		    $row[0],
 		    $row[1],
 		    $row[2],
  		    $row[3],
 		    $row[4],
 		    $row[5],
 		    $row[6],
 		    $row[7],
 		    $row[8],
 		    $row[9],
 		    $row[10],
 		    $row[11],
 		    $row[12],
 		    $row[13],
 		    $row[14],
 		    $row[15],
 		    $row[16],
 		    $row[17],
 		    $row[18],
 		    $row[19],
 		    $row[20],
 		    $row[21],
 		    $row[22]
		     		    );
  	if ($per <> "incoming") {
 	    	if ((strlen($per)) >= $len) {
 		 	            echo ("Номер - " . $per . " Длина - ". (strlen($per)). "\n");
 	    	    echo(("Минуты	- " . ($row[10])/60) ."\n");
 		    echo("Минуты округленые - " . (ceil(($row[10])/60))."\n");
 		    $valid++;
  		    dbase_add_record($dbval,$arr);
 		    dbase_pack($dbval);
      		    echo("Выполнено - ".(($i*100)/$record_numbers)."%\n");
 		    echo("==================================\n");
 		     		}else{
 		    echo ("invalid Number - " . $per . " Dlina - ". (strlen($per)). "\n");
 	    	    echo(("Minuts	- " . ($row[10])/60) ."\n");
 		    echo("Minuts after ceil - " . (ceil(($row[10])/60))."\n");
 		    $invalid++;
 		    dbase_add_record($dbinv,$arr);
 		    dbase_pack($dbinv);
 		    echo("Выполнено - ".(($i*100)/$record_numbers)."%\n");
 		    echo("==================================\n");
 		    //$invalid=array_merge($invalid,$row);
 		};
     	}else{
 	    echo ("Incoming! - " . $per . " Dlina - ". (strlen($per)). "\n");
 	    echo(("Minuts	- " . ($row[10])/60) ."\n");
 	    echo("Minuts after ceil - " . (ceil(($row[10])/60))."\n");
 	    $invalid++;
 	    dbase_add_record($dbinv,$arr);
 	    dbase_pack($dbinv);
 	    echo("Выполнено - ".(($i*100)/$record_numbers)."%\n");
 	    echo("==================================\n");
 	    //$invalid=array_merge($invalid,$row);
 	 	//echo("Выполнено - ".(($record_numbers*$i)/100)."%\n");
 	};
 	 /*echo("Vsego zapisey v fayle - ".$record_numbers."\n");
 echo("Valid zapisey - " .count($valid) ."\n");
 echo("Invalid zapisey - ".count($invalid)."\n"); 
echo("=============================================\n");*/
 }  dbase_close($db);
   };
 if($db){ echo("Всего записей в файле - ".$record_numbers."\n");
 echo("Валидных записей - " .($valid) ."\n");
 echo("Невалидных записей - ".($invalid)."\n");
 echo("=============================================\n");
 };
?>
собственно скрипт
парсер логов мини атс-ки

-~{}~ 02.02.09 15:45:

http://depositfiles.com/ru/files/93idmlbaa
файл локальные пути тока смените, не доделал.
 
http://snaps.php.net/php5.2-latest.tar.gz ща соберу это и попробую

-~{}~ 02.02.09 16:19:

всё работает, всем спасибо
PHP 5.2.9-dev (cli) (built: Feb 2 2009 15:57:37)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
hukola@laptop4ek:/tmp/php5.2-200902021130$
 
Сверху