如何将文本文件的行结尾从DOS转换为Unix?

时间:2011-08-03 10:40:17

标签: php unix text text-files line-endings

我将这个PHP代码保存在文本文件中,我想将此文本文件转换为Unix行结尾。怎么样?

 <?php 

    class City
    {
        private $lat=0.0;
        private $lng=0.0;
        private $name="";
        private $visited=false;
        private $order=1;

        function City($name,$lat,$lng)
        {
            $this->name=$name;
            $this->lat=$lat;
            $this->lng=$lng;
        }
        function getName()
        {
            return $this->name;
        }
        function getLat()
        {
            return $this->lat;
        }
        function getLng()
        {
            return $this->lng;
        }
        function getOrder()
        {
            return $this->order;
        }
        function getVisited()
        {
            return $this->visited;
        }
        function setVisited($value)
        {
            $this->visited=$value;
        }
        function setOrder($value)
        {
            $this->order=$value;
        }
    }

    class Main
    {
        public $allCities=array();
        private $k=1;
        private $totalDistance=0;

        /*class main empty constructor*/
        function Main()
        {}

        function sortArray()
        {
            for($i=count($this->allCities)-1;$i>=0;$i--)
            {
                for($j=$i-1;$j>=0;$j--)
                {
                    if($this->allCities[$i]->getOrder()<$this->allCities[$j]->getOrder())
                    {
                        $temp=$this->allCities[$j];
                        $this->allCities[$j]=$this->allCities[$i];
                        $this->allCities[$i]=$temp;
                    }
                }
            }
        }
        /* method to read from cities.txt file */
        function getCitiesFromTextFile()
        {
            $f="cities.txt";
            $fo=fopen($f,'r');
            while ( $line = fgets($fo, 1000) ) 
            {
                $delimiter=" ";
                $temp = explode($delimiter, $line);
                $c11=new City($temp[0],$temp[1],$temp[2]);
                $this->allCities[]=$c11;
            }
        }

        /* to print the data stored in an array ( without ordering the cities ) */
        function displayAllCities()
        {
            for($i=0;$i<count($this->allCities);$i++)
            {
                print $this->allCities[$i]->getName()."<br>";
            }
        }
        function rad($x)
        {
            return $x*pi()/180;
            //return $x;
        }
        /* to calculate the distance between two cities */
        function calculatedistance($city1,$city2)
        {
            $lat1=$city1->getLat();
            $lng1=$city1->getLng();

            $lat2=$city2->getLat();
            $lng2=$city2->getLng();
        //  Spherical law of cosines:   d = acos(sin(lat1).sin(lat2)+cos(lat1).cos(lat2).cos(long2-long1)).R
        //  R=3437.74677 (nautical miles)
        //  R=6378.7 (kilometers)
        //  R=3963.0 (statute miles) 

            $R = 6371; // earth's mean radius in km
            $dLat  = $this->rad($lat2 - $lat1);
            $dLng = $this->rad($lng2 - $lng1);

            $a = sin($dLat/2) * sin($dLat/2) +cos($this->rad($lat1)) * cos($this->rad($lat2)) * sin($dLng/2) * sin($dLng/2);
            $c = 2 * atan2(sqrt($a), sqrt(1-$a));
            $d = $R * $c;

            return $d;
            //$distance=acos(sin($lat1)*sin($lat2)+cos($lat1)*cos($lat2).cos($lng2-$lng1))*$R;
            //return $distance;
        }

        /* to calculate the optimal path passing all cities once time for each city */
        function findPath($start)
        {
            for($i=0;$i<count($this->allCities);$i++)
            {
                if($this->k>count($this->allCities))
                    break;
                if($this->allCities[$i]->getName()==$start &&!$this->allCities[$i]->getVisited())
                {
                    $this->allCities[$i]->setVisited(true);
                    $this->allCities[$i]->setOrder($this->k);
                    $lower_index=0;
                            $lower_dis=1000000;
                    for($j=0;$j<count($this->allCities);$j++)
                    {
                        if(!$this->allCities[$j]->getVisited())
                        {
                            $dis=$this->calculatedistance($this->allCities[$j],$this->allCities[$i]);
                            if($dis<$lower_dis)
                            {
                                $lower_index=$j;
                                $lower_dis=$dis;
                            }

                        }
                    }

                    $this->k++;
                    $this->findPath($this->allCities[$lower_index]->getName());
                }// enf if
            }// end for     
        }// end function

        /* method to display the total distance of the route passign all cities */
        function getTotalDistance()
        {
            return $this->totalDistance;
        }
    }// end class

//$test=new City("Gaza",1.2,1.50);
$m=new Main();
$m->getCitiesFromTextFile();
//$m->displayAllCities();
$m->findPath("Beijing");
$m->sortArray();
$m->displayAllCities();
$m->getCitiesFromTextFile();
?>

4 个答案:

答案 0 :(得分:3)

有一个实用程序:

dos2unix -o $output_file $input_file

查看手册页以获取更多选项。

还有其他聪明的sed hacks,但更好地使用经过试验和测试的实用程序,而不是使用sed进行黑客攻击,这可能不太清楚。

答案 1 :(得分:3)

类似的东西:

<?php
$file = file_get_contents("file.php");
$file = str_replace("\r", "", $file);
file_put_contents("file.php", $file);

=)

编辑1

如果你在Linux上 - 有一个名为Kate的好编辑器(转换编码和行尾)

答案 2 :(得分:1)

如果dos2unix不可用,则todos / fromdos可能是:

fromdos <filename>

答案 3 :(得分:0)

在* nix上,没有安装任何东西:

cat yourFile | tr '\r\n' '\n' > newFile

然后,你可以测试你的新文件,如果你感到高兴,可以替换旧文件