Reputation: 1069
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."\n"); //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."\n");
but then i get results like:
string1
string2
string3
string4
string5
Upvotes: 1
Views: 416
Reputation: 78994
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("\n", $out));
Note: You may need to implode on \r\n
to see the newline in some Windows applications like notepad.
Upvotes: 1
Reputation: 54841
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 . "\n");
}
}
fclose($in);
}
Upvotes: 2