<?php
ob_start();
print"Kirjoita tallennettavat arvot:<br>";
print"<FORM METHOD=\"POST\" ACTION=\"?act=add\">
Arvo1: <INPUT TYPE=\"text\" NAME=\"tieto[]\" maxlength=\"500\"> (max 50 merkkiä) (string)<br>
Arvo2: <INPUT TYPE=\"text\" NAME=\"tieto[]\" maxlength=\"100\"> (max 10 merkkiä) (int)<br>
Arvo3: <INPUT TYPE=\"text\" NAME=\"tieto[]\" maxlength=\"100\"> (max 10 merkkiä) (float)<br>
Arvo4: <INPUT TYPE=\"text\" NAME=\"tieto[]\" maxlength=\"50\"> (max 5 merkkiä) (int)<br>
<INPUT TYPE=\"submit\" value=\"Tallenna\"><BR>
</FORM>";
$act = $_GET['act'];
function create_static_sorted_file($tiedosto, $data, $_POST, $reverse = 0){
$rivit = file($tiedosto);
// Lisätään uusi rivi vanhojen jatkoksi:
$rivit[] = generate_sorted_row($data, $_POST);
// Järjestetään lista:
sort($rivit);
return $rivit;
}
function read_sorted_vals($data, $rivi){
$alku = 0;
$vals = array();
foreach($data['order'] as $k => $v){
$len = $data['limits'][$v];
$style = $data['style'][$v];
$type = $data['types'][$v];
$max = $data['max'][$type];
$val = trim(substr($rivi, $alku, $len));
if($type != "string"){
if($style < 0){
$val = $max-$val;
}
}
$vals[] = $val;
$alku += $len;
}
return $vals;
}
function generate_sorted_row($data, $_VARS){
$list = array();
// Luodaan uusi tallennettava rivi tietyillä ehdoilla:
foreach($data['order'] as $k => $v){
$dat = $_VARS['tieto'][$v]; // Lomakkeesta tullut arvo
$raja = $data['limits'][$v]; // Merkkijonorajoitukset
$type = $data['types'][$v]; // Tietotyyppi
// Tarkistetaan ettei ole merkkijono, sillä merkkijonoja
// ei voi järjestää käänteisesti yhdellä laskutoimituksella:
if($type != "string"){
$maksimi = $data['max'][$type];
// Jos numeerinen arvo on suurempi kuin maksimi, tai se on liian pitkä:
if(strlen($dat) > $raja || $dat > $maksimi){
$dat = $maksimi;
}
// Jos haluttiin kääntää numeerisen arvon järjestys toisinpäin:
if($data['style'][$v] < 0){
// Luodaan luvusta päinvastanen luku. Tällä tavalla saamme
// arvon järjestymään käänteiseen järjestykseen halutessa:
$dat = $maksimi-$dat;
}
// Jos uusi pituus onkin pidempi kuin merkkijonon rajoitin,
// luodaan uusi numero joka on suurin mahdollinen arvo sille pituudelle:
if(strlen($dat) > $raja){
$dat = str_repeat("9", $raja);
}
}else{
// Jos merkkijono on liian pitkä, katkaistaan se:
if(strlen($dat) > $raja){
$dat = substr($dat, 0, $raja);
}
}
// Lisätään merkkijonon vasemmalle puolelle täytteeksi välilyöntejä:
$list[] = str_pad((string)$dat, $raja, " ", STR_PAD_LEFT);
}
return implode("", $list);
}
// Daatta tiedot taulukon järjestämistä varten:
$data = array(
// Missä järjestyksessä tiedot järjestetään,
// ole tarkkana ettei tule kahta samaa arvoa, tai yksikään arvo jää pois:
"order" => array(1, 2, 3, 0),
// Miten tiedot järjestetään, -1 tarkoittaa että
// arvo järjestetään käänteiseen järjestykseen:
"style" => array(1, 1, -1, 1),
// Merkkijonojen pituusrajoitukset jokaiselle arvolle:
"limits" => array(50, 10, 10, 5),
// Tietotyypit jokaiselle arvoille:
"types" => array("string", "int", "float", "int"),
// Maksimiarvot int, float tai bool tyypeille:
"max" => array("int" => 2147483647, "float" => 2147483647, "bool" => 1)
);
$tiedosto = "static_sort.txt";
$filu = file($tiedosto);
foreach($filu as $rivi){
$vals = read_sorted_vals($data, $rivi);
print"($vals[0]) = ($vals[1]) = ($vals[2]) = ($vals[3])<br>";
}
if($act == "add"){
// Luodaan taulukko tiedostosta joka järjestetään staattisesti:
$rivit = create_static_sorted_file($tiedosto, $data, $_POST);
// Tallennetaan lista, ei tarvitse järjestää joka sivunlatauksella uudestaan,
// varoitus: w-moodi! saattaa hajottaa tiedoston jos useampi tallentaa samaan aikaan,
// jos haluat estää tämän, täytyy sinun käyttää a-moodia tallennukseen, ja järjestää tiedosto
// joka kerta uudestaan kun sivu ladataan:
$save = fopen($tiedosto, "w");
foreach($rivit as $rivi){
fwrite($save, rtrim($rivi, "\r\n")."\n");
}
fclose($save);
header("Location: static_sort.php");
}
ob_end_flush();
?>Aihe on jo aika vanha, joten et voi enää vastata siihen.