cách thay thế một hàng cụ thể bằng cách sử dụng php. Tôi không biết số dòng. Tôi muốn thay thế một dòng có chứa một từ cụ thể.làm thế nào để thay thế một dòng cụ thể trong một tập tin văn bản bằng cách sử dụng php?
Trả lời
Một phương pháp mà bạn có thể sử dụng trên các tập tin nhỏ hơn mà có thể phù hợp vào bộ nhớ của bạn hai lần:
$data = file('myfile'); // reads an array of lines
function replace_a_line($data) {
if (stristr($data, 'certain word')) {
return "replaement line!\n";
}
return $data;
}
$data = array_map('replace_a_line',$data);
file_put_contents('myfile', implode('', $data));
Một lưu ý nhanh chóng, PHP> 5.3.0 hỗ trợ các hàm lambda để bạn có thể loại bỏ các tuyên bố hàm có tên và rút ngắn bản đồ để:
$data = array_map(function($data) {
return stristr($data,'certain word') ? "replacement line\n" : $data;
}, $data);
Bạn về mặt lý thuyết có thể làm điều này một đơn (khó khăn hơn để làm theo) php tuyên bố:
file_put_contents('myfile', implode('',
array_map(function($data) {
return stristr($data,'certain word') ? "replacement line\n" : $data;
}, file('myfile'))
));
khác (ít bộ nhớ chuyên sâu) cách tiếp cận mà bạn nên sử dụng cho các tập tin lớn hơn:
$reading = fopen('myfile', 'r');
$writing = fopen('myfile.tmp', 'w');
$replaced = false;
while (!feof($reading)) {
$line = fgets($reading);
if (stristr($line,'certain word')) {
$line = "replacement line!\n";
$replaced = true;
}
fputs($writing, $line);
}
fclose($reading); fclose($writing);
// might as well not overwrite the file if we didn't replace anything
if ($replaced)
{
rename('myfile.tmp', 'myfile');
} else {
unlink('myfile.tmp');
}
Nếu bạn không biết dòng, bạn sẽ phải tìm kiếm trên tất cả các dòng.
Hoặc là iterate over the file line by line hoặc read the file into memory all at once. Sau đó, hãy tìm từ với sự kết hợp của strpos
và str_replace
hoặc sử dụng preg_replace
.
Nếu bạn lặp lại, chỉ cần sử dụng strpos
và thay thế dòng sau khi nó không trả về FALSE. Sau đó lưu tệp vào đĩa.
Bạn cần phải ghi đè lên toàn bộ tập tin.
Vì vậy, đối với tệp tương đối nhỏ, read file into array, tìm kiếm từ, thay thế hàng được tìm thấy, viết all the rest vào file.
Đối với tệp lớn, thuật toán hơi khác, nhưng hoàn toàn giống nhau.
phần quan trọng là file locking
đó là lý do tại sao chúng tôi muốn có một cơ sở dữ liệu.
+1 cho ghi chú trên 'flock()' – gnarf
$filedata = file('filename');
$newdata = array();
$lookfor = 'replaceme';
$newtext = 'withme';
foreach ($filedata as $filerow) {
if (strstr($filerow, $lookfor) !== false)
$filerow = $newtext;
$newdata[] = $filerow;
}
Bây giờ $newdata
chứa các nội dung tập tin như là một mảng (sử dụng implode()
nếu bạn không muốn mảng) với dòng có chứa "replaceme" thay bằng "withme".
Bạn cũng có thể sử dụng chế độ đa phù hợp với biểu thức thông thường
preg_match_all('/word}/m', $textfile, $matches);
này là, tất nhiên, giả sử đó là một tài liệu nhỏ hơn ở tư thế sẵn sàng và tải. Nếu không, các câu trả lời khác là "thế giới thực" của giải pháp.
Có lẽ điều này có thể giúp:
$data = file("data.php");
for($i = 0;$i<count($data);$i++){
echo "<form action='index.php' method='post'>";
echo "<input type='text' value='$data[$i]' name='id[]'><br>";
}
echo "<input type='submit' value='simpan'>";
echo "</form>";
if(isset($_POST['id'])){
file_put_contents('data.php',implode("\n",$_POST['id'])) ;
}
này là tốt nếu bạn đang tìm kiếm một chuỗi con (ID) trong một dòng và muốn thay thế dòng cũ với một dòng mới.
Code:
$id = "123";
$new_line = "123,Programmer\r"; // We're not changing the ID, so ID 123 remains.
$contents = file_get_contents($dir);
$new_contents= "";
if(strpos($contents, $id) !== false) { // if file contains ID
$contents_array = preg_split("/\\r\\n|\\r|\\n/", $contents);
foreach ($contents_array as &$record) { // for each line
if (strpos($record, $id) !== false) { // if we have found the correct line
$new_contents .= $new_line; // change record to new record
}else{
$new_contents .= $record . "\r";
}
}
file_put_contents($dir, $new_contents); // save the records to the file
echo json_encode("Successfully updated record!");
}
else{
echo json_encode("failed - user ID ". $id ." doesn't exist!");
}
Ví dụ:
Cũ file:
ID, nghề nghiệp
123, sinh viên
124, lớp gạch
Chạy mã sẽ thay đổi tập tin để:
New file:
ID, nghề nghiệp
123, lập trình viên
124, gạch lớp
- 1. thay thế một văn bản cụ thể trong tất cả các tệp bằng cách sử dụng lệnh dòng đơn
- 2. Làm thế nào để xóa một dòng cụ thể từ một tập tin trong Unix?
- 3. Làm cách nào để thay thế một dòng cụ thể theo số dòng trong tệp văn bản?
- 4. Làm thế nào để xóa một dòng từ một tập tin văn bản trong C#?
- 5. Làm thế nào để có được một số dòng cụ thể từ tập tin văn bản lớn trong Unix?
- 6. Làm thế nào để viết văn bản vào một tập tin văn bản bằng Photoshop JavaScript?
- 7. Làm cách nào để chuyển đến một dòng cụ thể trong một tệp văn bản lớn?
- 8. Thay thế một dòng trong một tệp văn bản
- 9. Làm thế nào để thay đổi một dòng trong một tệp bằng cách sử dụng NAnt?
- 10. BASH: chương trình đệ quy để thay thế văn bản trong một cây các tập tin
- 11. Làm thế nào để đọc một số tiền cụ thể của các nhân vật từ một tập tin văn bản
- 12. Làm thế nào để thay thế toàn bộ dòng trong một tệp văn bản
- 13. Làm thế nào để lưu nội dung của một chuỗi thành tập tin văn bản bằng cách sử dụng SaveFileDialog?
- 14. Trong mercurial, làm thế nào để áp dụng một bản vá đảo ngược cho một tập tin cụ thể?
- 15. làm thế nào để đếm tổng số dòng trong một file văn bản sử dụng python
- 16. Làm thế nào để có được một dòng ngẫu nhiên của một tập tin văn bản trong Java?
- 17. Làm thế nào để sử dụng EOF để chạy qua một tập tin văn bản trong C?
- 18. Làm thế nào để mã hóa một tập tin văn bản bằng C?
- 19. Làm thế nào để thay thế nhiều mục từ một chuỗi văn bản trong PHP?
- 20. Làm thế nào để thay thế văn bản trong một tệp PDF bằng C#?
- 21. Thay thế dòng đầu tiên trong một tệp văn bản bằng một chuỗi
- 22. Thay thế một dòng với nhiều dòng văn bản
- 23. Làm thế nào để thay thế một ký tự bằng một dòng mới trong Emacs?
- 24. làm thế nào để làm cho git không thay đổi kết thúc dòng cho một tập tin cụ thể?
- 25. Chức năng Powershell để thay thế hoặc thêm dòng trong các tập tin văn bản
- 26. Làm thế nào để sao chép một tập tin PHP sử dụng PHP
- 27. Làm thế nào để ghi đè lên một file văn bản từ một tập tin batch
- 28. Lựa chọn thay thế để sử dụng văn bản() để thêm văn bản vào một ô
- 29. Làm thế nào để loại bỏ một khóa cụ thể trong một mảng bằng cách sử dụng php?
- 30. Đọc một tập tin văn bản đơn giản với php
Thanq ..... Đang hoạt động tốt – kishore
Cách tiếp cận ít bộ nhớ là chính xác những gì tôi cần (đơn giản và dễ hiểu) ..... CẢM ƠN !!! – scottcarmich