Posted by
Накукрыскин in
Быдлокодер,
Интернетное on
06 8, 2009 |
13 комментариев
Как я уже говорил — моя практика в университете заключается в том, что я должен написать приложение на php, которые будет подсчитывать количество повторяющихся в тексте символов и которые строго определены в конфиге (который может содержаться и в текстовом файле и просто передаваться через textarea). Как только мне задали это задания — я подумал о Google Charts о котором недавно читал на хабрахабре.
Вчера я сел и написал это небольшое приложение:
function graphfile($SUPPORTCHARS, $file=false, $text=false)
{
$str = array(); //for sting
$ch=0;
if($text && !$file)
{
$file = fopen("tmp/tmp.txt", "w");
fwrite($file, $text);
fclose($file);
$file = fopen("tmp/tmp.txt", "r");
}
while(!feof($file))
{
$str = fgets($file);
$lenstr = strlen($str);
for($i=0;$i<=$lenstr;$i++)
{
if($str[$i]!=NULL && strstr($SUPPORTCHARS, $str[$i]))
{
$pt = $ch;
$tr = 0;
for($j=0;$j<$ch;$j++)
{
if($chars[$j][1]==$str[$i])
{
$pt = $j;
$tr = 1;
}
}
if($tr!=1)
{
$chars[$pt][1]=$str[$i];
$chars[$pt][0]=0;
}
for($j=0;$j<=$lenstr;$j++)
{
if($str[$j]==$chars[$pt][1])
{
$str[$j]=NULL;
$chars[$pt][0]++;
}
}
if($tr!=1) $ch++;
}
}
}
fclose($file);
$charturl = "http://chart.apis.google.com/chart?cht=bvs&chxt=x,y,x&";
$width = $ch*20;//chs=$widthx$height;
$height = 400;
do{
$height--;
$width--;
}while(($width*$height)>300000 || $width>1000);
sort($chars);
$vars = "0:|";
$data = "2:|";
$maxv = 0;
$chb = 15;
for($i=0;$i<$ch;$i++)
{
$vars .= $chars[$i][0]."|";
$data .= $chars[$i][1]."|";
if($chars[$i][0]>$maxv) $maxv = $chars[$i][0];
}
$charturl .= "chs=".$width."x".$height."&";
$simpleEncoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-.';
$chartData = "s:";
for ($i = 0; $i < $ch; $i++) {
$currentValue = $chars[$i][0];
if ($currentValue > -1) {
$chartData.=substr($simpleEncoding,61*($currentValue/$maxv),1);
}
else {
$chartData.='_';
}
}
$charturl .= "chd=".$chartData."&chbh=".$chb."&chco=76A4FB&chxl=".$vars."1:|0|".($maxv/2)."|".$maxv."|".$data;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=<?=$_CHARSET;?>" />
<title><?=_TITLE;?></title>
</head>
<body>
<h3><i><?=_TITLE;?></i></h3>
<p><i><?=_GRAPHTITLE;?></i></p>
<?=$error;?>
<table>
<tr>
<td>
<?php
echo "<a href = \"".$charturl."\" target = \"_blank\"><img src = \"".$charturl."\" border = \"0\" width = \"".$width."\" height = \"".$height."\"/></a>";
?>
</td>
</tr>
<tr>
<td>
<a href = "index.php"><?=_NEWGRAPH?></a>
</td>
</tr>
</table>
</body>
</html>
<?php
}
В прочем в построении графика не было ничего необычного. С помощью отдельной функции я считал повторяющиеся в тексте символы, которые разрешены для учета.
Те, кому не терпится посмотреть исходных код программы я могу предложить посмотреть исходный код функции, которая обрабатывает данные из файла и строит графики.
(далее...)