dongranding3909
2017-01-09 17:57 阅读 49
已采纳

打开多个文件并将其数据写入一个文件,包括换行符

I have multiple .m3u files containing strings like:

string1
string2 etc //(with the line break)

I want to add this information into one file but when it gets to the end of a file, add a line break. Because when i do the code it works but when it connects the next file i get results like:

string10
string11string12
string13

I want to prevent this and add everything to new line. Code below:

<?PHP
//File path of final result
$longfilepath = "/var/lib/mpd/playlists/";

$filepathsArray = [$longfilepath."00's.m3u",$longfilepath."50's.m3u",$longfilepath."60's.m3u",$longfilepath."70's.m3u",$longfilepath."80's.m3u",$longfilepath."90's.m3u",$longfilepath."Alternative Rock.m3u",$longfilepath."Best Of Irish.m3u",$longfilepath."Blues.m3u",$longfilepath."Chart Hits.m3u",$longfilepath."Christmas.m3u",$longfilepath."Classic Rock.m3u",$longfilepath."Classical Opera.m3u",$longfilepath."Country.m3u",$longfilepath."Dance.m3u",$longfilepath."Disco.m3u",$longfilepath."Easy Listening.m3u",$longfilepath."Electric Rock.m3u",$longfilepath."Hard Rock.m3u",$longfilepath."Irish Country.m3u",$longfilepath."Jazz.m3u",$longfilepath."Live and Acoustic.m3u",$longfilepath."Love Songs.m3u",$longfilepath."Pop.m3u",$longfilepath."Rap and RnB.m3u",$longfilepath."Reggae.m3u",$longfilepath."Relaxation.m3u",$longfilepath."Rock and Roll.m3u",$longfilepath."Rock.m3u",$longfilepath."Soul.m3u",$longfilepath."Soundtracks.m3u",$longfilepath."Top Bands.m3u"];
$filepath = "mergedfiles.txt";

$out = fopen($filepath, "w");
//Then cycle through the files reading and writing.

foreach($filepathsArray as $file){
  $in = fopen($file, "r");
  while ($line = fgets($in)){
       fwrite($out, $line."
"); //My attempt to add new line (which works) but then adds an extra for those that dont need it.
  }
  fclose($in);
}

//Then clean up
fclose($out);
?>

I use:

fwrite($out, $line."
");

but then i get results like:

string1

string2
string3

string4

string5
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    douseda0009 douseda0009 2017-01-09 18:01

    Before adding your own linebreak - remove all linebreaks that can be in a string with trim (or even empty lines):

    foreach($filepathsArray as $file){
      $in = fopen($file, "r");
      while ($line = fgets($in)) {
           $line = trim($line);
           if ($line) {
               // if line is not empty - write it to a file
               fwrite($out, $line . "
    ");
           }
      }
      fclose($in);
    }
    
    点赞 评论 复制链接分享
  • douluoyou9876 douluoyou9876 2017-01-09 18:04

    This might be easier:

    $out = array();
    foreach($filepathsArray as $file) {
        $out = array_merge($out, file($file, FILE_IGNORE_NEW_LINES, FILE_SKIP_EMPTY_LINES));
    }
    file_put_contents($filepath, implode("
    ", $out));
    
    • Read the files into an array ignoring newlines and empty lines
    • Implode the array using newlines and write to the final file

    Note: You may need to implode on to see the newline in some Windows applications like notepad.

    点赞 评论 复制链接分享

相关推荐