Godhaze
Godhaze

Reputation: 155

How can I remove unwanted spaces from txt file

I'm trying to modify my txt file what I'm using in dokuwiki.

I generate timestamp on top of the txt file like this:

function filecont($file,$data)
{
    $fileContents = file($file);

    array_shift($fileContents);
    array_unshift($fileContents, $data);

    $newContent = implode("\n", $fileContents);

    $fp = fopen($file, "w+");   
    fputs($fp, $newContent);
    fclose($fp);
}

And my original txt file looks like this:

Now when I use my function:

$txt= "Last generated: " . date("Y M D h:i:s");
filecont($file,$txt);

I get a result like this:

Now I don't want to remove my ====== Open IoT book ======, it's probably because I don't have empty space in the first line?

But the worst problem that I have Is that is generates many empty spaces what I don't want.

I only want to get last generated at the top of the txt file and anything else untouched

Upvotes: 0

Views: 79

Answers (3)

Springie
Springie

Reputation: 728

I tested your code and removed the extra newlines by changing the line:

$fileContents = file($file);

to

$fileContents = file($file, FILE_IGNORE_NEW_LINES);

Adding the FILE_IGNORE_NEW_LINES flag stops a newline being added to each element/line.

http://php.net/manual/en/function.file.php.

I also removed the array_unshift(), which leaves '====== Open IoT book ======' in the file.

So my final function looked like this:

function filecont($file,$data)
{
    $fileContents = file($file, FILE_IGNORE_NEW_LINES);

    //array_shift($fileContents); Removed to preserve '====== Open IoT book ======' line.
    array_unshift($fileContents, $data);

    $newContent = implode("\n", $fileContents);

    $fp = fopen($file, "w+"); 
    fclose($fp);
}

Upvotes: 2

B. Desai
B. Desai

Reputation: 16436

when you get elements of file you need to check whether Last generated: is as your first row or not accordong to it yu need to use array_shift

$fileContents = file($file);
  if(stripos($fileContents[0],"Last generated:") !== false)
  {
    array_shift($fileContents); //if found use shift
  }

    array_unshift($fileContents, $data);

Upvotes: 1

Paladin
Paladin

Reputation: 1637

Might just delete this line

array_shift($fileContents);

solve your problem?

Upvotes: 1

Related Questions