Write to a specific line?

Discussion in 'PHP' started by dp-user-1, May 7, 2007.

  1. #1
    How do I write to a specific line ($number) of a flat file?

    Thanks,
    Peter
     
    dp-user-1, May 7, 2007 IP
  2. Wyla

    Wyla Well-Known Member

    Messages:
    924
    Likes Received:
    14
    Best Answers:
    0
    Trophy Points:
    140
    #2
    Could you explain what you mean a bit more in depth?
     
    Wyla, May 7, 2007 IP
  3. dp-user-1

    dp-user-1 Well-Known Member

    Messages:
    794
    Likes Received:
    20
    Best Answers:
    0
    Trophy Points:
    110
    #3
    Flat file:
    Purple
    Green
    Red
    Orange
    Pink
    Maroon
    Code (markup):
    I want to replace a line of my choice (dictated by a variable called $number) with the word "Blue."

    Thanks,
    Peter
     
    dp-user-1, May 7, 2007 IP
  4. Wyla

    Wyla Well-Known Member

    Messages:
    924
    Likes Received:
    14
    Best Answers:
    0
    Trophy Points:
    140
    #4
    echo str_replace("Orange","Blue", $file)
    PHP:
     
    Wyla, May 7, 2007 IP
  5. dp-user-1

    dp-user-1 Well-Known Member

    Messages:
    794
    Likes Received:
    20
    Best Answers:
    0
    Trophy Points:
    110
    #5
    Well, I don't think it's that simple.

    Instead of telling the script to replace "Orange," I want it to replace the line number of my choice (represented by $number).
     
    dp-user-1, May 7, 2007 IP
  6. rodney88

    rodney88 Guest

    Messages:
    480
    Likes Received:
    37
    Best Answers:
    0
    Trophy Points:
    0
    #6
    There may be a better way, especially if you're handling larger files, but you could load the entire file into an array using file(), update the array (where line number-1 = array key) and save.
    $fileName = 'stuff.txt';
    $lineNumber = 10;
    $changeTo = "the changed line\n\r";
    
    // Load file into array
    $contents = file($fileName);
    
    // Replace line
    $contents[$lineNumber-1] = $changeTo;
    
    // Implode and save
    file_put_contents($fileName, implode('',$contents));
    PHP:
     
    rodney88, May 7, 2007 IP
  7. Chris.

    Chris. Guest

    Messages:
    9
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #7
    You could also use the explode function, and a form to decide what line you want to edit.
     
    Chris., May 7, 2007 IP
  8. dp-user-1

    dp-user-1 Well-Known Member

    Messages:
    794
    Likes Received:
    20
    Best Answers:
    0
    Trophy Points:
    110
    #8
    Fatal error: Call to undefined function: file_put_contents() in /home/user/public_html/folder/folder/file.php on line 21
     
    dp-user-1, May 7, 2007 IP
  9. dp-user-1

    dp-user-1 Well-Known Member

    Messages:
    794
    Likes Received:
    20
    Best Answers:
    0
    Trophy Points:
    110
    #9
    dp-user-1, May 7, 2007 IP
  10. nico_swd

    nico_swd Prominent Member

    Messages:
    4,153
    Likes Received:
    344
    Best Answers:
    18
    Trophy Points:
    375
    #10
    nico_swd, May 7, 2007 IP
  11. dp-user-1

    dp-user-1 Well-Known Member

    Messages:
    794
    Likes Received:
    20
    Best Answers:
    0
    Trophy Points:
    110
    #11
    :) Done! Thanks!
     
    dp-user-1, May 7, 2007 IP