<?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.