2011-08-03 121 views
0

我有這個PHP代碼保存在文本文件中,我想將這個文本文件轉換爲Unix行結束符。怎麼樣?如何將文本文件的行結束符從DOS轉換爲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(); 
?> 
+0

很抱歉,如果我做一個明顯評論,但幾乎所有體面的編輯和IDE都允許您選擇換行符並在運行中對其進行更改。如果您只想更改* one *文件,則不需要外部工具。 –

回答

3

喜歡的東西:

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

=)

編輯1

如果你是在Linux上 - 有良好的編輯器命名爲Kate(轉換編碼和行尾)

+0

@Sudhi dos-like line-brake ='「\ r \ n」'。 linux ='「\ n」'$ - ) – Subdigger

3

有這個實用程序:

dos2unix -o $output_file $input_file 

檢查手冊頁更多的選擇。

還有其他聰明的sed黑客,但更好地使用一個久經考驗的實用程序,而不是使用sed進行黑客攻擊,哪一個可能不知道。

+0

從哪裏可以得到dos2unix?如果RHEL/CentOS/Fedora爲 – Adham

+0

,請執行yum install dos2unix。如果基於Debian的(Ubuntu的等)做sudo apt-get安裝dos2unix。它是一個非常基本的實用程序,幾乎所有的發行版都可以隨它一起安裝,或者將它放在其存儲庫中。 – Sudhi

+0

從哪裏可以得到這個工具,我是Windows用戶! – Adham

1

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

fromdos <filename> 
0

在* nix,無需安裝任何東西:

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

然後,你可以測試你NEWFILE,並更換舊的,如果你很高興

相關問題