开发者

Sort the unsorted text file and rewrite to same text file in sorted order

I have a question. I am in process of learning how to read/write files, bu开发者_如何学JAVAt having little trouble trying to do both at the same time in same php script. I have a text file with words like this,

Richmond,Virginia
Seattle,Washington
Los Angeles,California
Dallas,Texas
Jacksonville,Florida

I wrote a code to sort them in order and this will display in sort order by City.

<?php
$file = file("states.txt");
sort($file);
for($i=0; $i<count($file); $i++)
{
  $states = explode(",", $file[$i]);
  echo $states[0], $states[1],"<br />";
}
?>

From this, how can I rewrite those sorted information back into the states.txt file?


The easiest way to write the contents of $file back to the file would be using file_put_contents in collaboration with implode.

file_put_contents("states.txt", implode($file));


Try using fopen and fwrite.

$fileWrite = fopen("filePah", "w");

for($i=0; $i<count($file); $i++)
{
    fWrite($fileWrite, $file[i]);
}
fClose($fileWrite);


<?php
$file = file("states.txt");
sort($file);
$newContent = "";
for($i=0; $i<count($file); $i++)
{
  $states = explode(",", $file[$i]);
  $newContent .= $states[0] .', '. $states[1] . PHP_EOL;
}

file_put_contents('states.txt',$newContent);
?>

PHP: file_put_contents


Try something like this:

$fo = fopen("filename", "w");
$content = "";
for ($i = 0; $i < count($file); $i++) {
    $states = explode(",", $file[$i]);
    $content .= $states[0] . "," . $states[1] . "\n";
}
fwrite($fo, $content);
fclose($fo);


this is a little extended, however I thought it might be useful to smb. I have an m3u playlist and need only particular rows filtered, sorted and printed. Credits go to Devil:

<?php

//specify that the variable is of type array
$masiv = array();

//read the file
$file = '/home/zlobi/radio/pls/all.m3u';  

$f = fopen($file, "r");

while ($line = fgets($f))
{
//skip rows with #EXT
if(strpos($line, "#EXT") !== false) continue;

$text = str_replace('.ogg', ' ', $line);  
$text = str_replace('/home/zlobi/radio/',' ',$text);

//add the song as an element in an array
$masiv[] = $text;
}
$f = fclose($f);

//sort the array
sort($masiv);

//pass via the array, take each element and print it
foreach($masiv as $pesen)

print $pesen.'<br/>';

?>

masiv is array, pesen is song in Bulgarian :) CAPital letters are sorted first.

Regads


Once you are done reading the file into the array by a call to file. You can open the file for writing by using the fopen function, write into the file using the fwrite and close the file handle using fclose:

<?php
$file = file("states.txt");                  // read file into array.
$fh = fopen('states.txt','w') or die("..."); // open same file for writing.
sort($file);
for($i=0; $i<count($file); $i++)
{
    $states = explode(",", $file[$i]);
    echo $states[0], $states[1],"<br />";
    fwrite($fh,"$states[0],$states[1] <br />"); // write to file.
}
fclose($fh); // close file.
?>


Open the file, write to it, close it (this assumes $file is the variable from your code):

$fp = fopen('states.txt', 'w');
for($i=0; $i<count($file); $i++)
    fwrite($fp, $file[$i]);
}
fclose($fp);

And see http://php.net/manual/en/function.fwrite.php


This is by far the fastest and most elegant solution that I have found, when I had the same problem. If you're on Linux (with exec allowed in PHP configuration) you can do the following (provided you want to sort files numerically):

exec("sort -n " . $pathToOriginalFile . " > " . $pathToSortedFile);

Basically, execute bash command sort that sorts the lines in a file numerically. If you want to keep the data in the original file do this:

exec("sort -n " . $pathToOriginalFile . " > " . $pathToSortedFile);
exec("rm " . $pathToOriginalFile);
exec("mv " . $pathToSortedFile . " " . $pathToOriginalFile);

If you want an alphabetical sort just exclude -n (--numeric-sort) option.

exec("sort " . $pathToOriginalFile . " > " . $pathToSortedFile);

For me the command took about 3 seconds to sort 10 million lines in the file on the server.

You can find more about sort here http://www.computerhope.com/unix/usort.htm

Hope it helps.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜