10/10/2018, 09:34

php chỉ giáo phần làm việc với file

mình định làm một số ứng dụng php nhưng không muốn làm việc với MySQL là mấy

em đang vướng phần code để xóa 1 dòng bất kỳ trong file txt

VD em có file List.txt
Code:
1==||==khuc hat hanh quan
2==||==Ly nang oi
3==||==Bai ca nam thang
Giờ em code thế nào để nó del dòng 2 nhỉ mà ko del mấy dòng kia

giúp mình tí với
kenphan19 viết 11:39 ngày 10/10/2018
Trước hết bạn cần lấy tất cả thông tin ra (có thể dùng file_get_contents() hoặc readfile() ... cho vào 1 biến, tiếp đến lọc những gì bạn cần xóa ra khỏi biến và rewrite lại file.
Code thì có thể giống thế này ... còn lại bạn tự giải quyết tiếp ...
<?php
/*
1==||==khuc hat hanh quan
2==||==Ly nang oi
3==||==Bai ca nam thang
*/
function ncutchar_file($item, $file){
$str = file_get_contents($file);
$exp = explode("==||==", $str);
foreach($exp as $k => $v){
if($v != $item){
$newStr[] = $v;
}
}
return implode("==||==", $newStr);
}
$content = ncutchar_file("khuc hat hanh quan", "test.txt");
// đến đây thì rewrite file ...
?>
khonggiannet viết 11:48 ngày 10/10/2018
OK, Thank bác nhé !!!
lucky-boy viết 11:48 ngày 10/10/2018
Được gửi bởi kenphan19
Trước hết bạn cần lấy tất cả thông tin ra (có thể dùng file_get_contents() hoặc readfile() ... cho vào 1 biến, tiếp đến lọc những gì bạn cần xóa ra khỏi biến và rewrite lại file.
Code thì có thể giống thế này ... còn lại bạn tự giải quyết tiếp ...
Ko bik bác có xem lại cái function bác viết ko, chứ tui thấy nó ko ổn và ko chạy dc và nếu dc sẽ ra hog đúng theo yêu cầu của chủ topic. Edit lại chút

Code:
<?php
/*
1==||==khuc hat hanh quan
2==||==Ly nang oi
3==||==Bai ca nam thang
*/
function ncutchar_file($file, $line){
	$str = file_get_contents($file);
	$exp = explode("\n", $str);
	$line--;	
	$newStr = "";;
	foreach($exp as $k => $v){
		if( $k != $line )
			$newStr .= trim($v)."\n";
	}
	return $newStr;
}
$content = ncutchar_file( "data.txt", 2);
// đến đây thì rewrite file ...

echo $content;
?>
kenphan19 viết 11:35 ngày 10/10/2018
tớ viết nhưng chưa test mà ... chủ yếu là thuật toán thui muz` ... chủ topic hĩu cách làm là okie oy`
harzix viết 11:40 ngày 10/10/2018
Được gửi bởi kenphan19
tớ viết nhưng chưa test mà ... chủ yếu là thuật toán thui muz` ... chủ topic hĩu cách làm là okie oy`
Stress nặng rùi, cho tám xíu:

Thay vì lưu như vậy có thể dùng array và serialize/unserialize hay var_export sẽ nhẹ nhàng hơn. VD:

// sample:

$songs = array(
1 => array('name1', 'author1'),
2 => array('name2', 'author2'),
3 => array('name3', 'author3')
);

// commit
file_put_contents('songs.php', '<?php $songs = ' . var_export($songs, true) . ';');

// usage:

include_once 'songs.php';

// do something with $songs

fun,
imchicken viết 11:47 ngày 10/10/2018
thank mấy bạn mình làm được rồi

[=========> Bổ sung bài viết <=========]

ảm ơn nhiều nhiều nha
hackson viết 11:44 ngày 10/10/2018
Lúc trước mình đã viết nhiều website dùng file để lưu data khá lớn và phức tạp (do lúc đó chưa vững sql lắm).
Bạn nên tạo cấu trúc chuẩn cho csdl của bạn,

Cấu trúc tớ thường dùng là:
COL1_ROW1|COL2_ROW1|COL3_ROW1|...\n
COL1_ROW2|COL2_ROW2|COL3_ROW2|...\n
...
Nó cũng tương tự cấu trúc table của sql

Để khai thác dữ liệu bạn dùng hàm $data = file() nó sẻ đọc data file ra mãng (mỗi line là một phần tử của mãng)
sau đó dùng tiếp explode("|", $data[$n]); để tách col
Để tránh lỗi cấu trúc dữ liệu bạn nên dùng hàm urlencode() để mã hóa các ký tự đặc biệt dữ liệu (như ký tự xuống dòng và "|").

sau đây là ví dụ:
PHP Code:
// File mydata.txt
01|Tinh+thoi+xot+xa|Lam+truong|Tu+khi+quen+em+anh+da.....|
02|Con+duong+mau+xanh|Le+hieu|Nay+nguoi+yeu+xin+quay+mat+di.....|


// Request: ?id=1 để xem bài tình thôi xót xa
$data file("mydata.txt");
for(
$a 0$a count($data); $a++) {
  
$part explode("|"$data***91;$a***93;);
  if(
$part***91;0***93; == $_GET***91;'id'***93;) echo "Bài hát: " $part***91;1***93;, "<br>Ca sĩ trình bày: "$part***91;2***93;, "<p>Lời bài hát:<br>"$part***91;3***93;;

BossFTP viết 11:50 ngày 10/10/2018
Được gửi bởi hackson
Lúc trước mình đã viết nhiều website dùng file để lưu data khá lớn và phức tạp (do lúc đó chưa vững sql lắm).
Bạn nên tạo cấu trúc chuẩn cho csdl của bạn,

Cấu trúc tớ thường dùng là:
COL1_ROW1|COL2_ROW1|COL3_ROW1|...\n
COL1_ROW2|COL2_ROW2|COL3_ROW2|...\n
...
Nó cũng tương tự cấu trúc table của sql

Để khai thác dữ liệu bạn dùng hàm $data = file() nó sẻ đọc data file ra mãng (mỗi line là một phần tử của mãng)
sau đó dùng tiếp explode("|", $data[$n]); để tách col
Để tránh lỗi cấu trúc dữ liệu bạn nên dùng hàm urlencode() để mã hóa các ký tự đặc biệt dữ liệu (như ký tự xuống dòng và "|").

sau đây là ví dụ:
PHP Code:
// File mydata.txt
01|Tinh+thoi+xot+xa|Lam+truong|Tu+khi+quen+em+anh+da.....|
02|Con+duong+mau+xanh|Le+hieu|Nay+nguoi+yeu+xin+quay+mat+di.....|


// Request: ?id=1 để xem bài tình thôi xót xa
$data file("mydata.txt");
for(
$a 0$a count($data); $a++) {
  
$part explode("|"$data***91;$a***93;);
  if(
$part***91;0***93; == $_GET***91;'id'***93;) echo "Bài hát: " $part***91;1***93;, "<br>Ca sĩ trình bày: "$part***91;2***93;, "<p>Lời bài hát:<br>"$part***91;3***93;;

DB tự chế thì chỉ dể dùng cho web nho nhỏ thoai, vả lại tốc độ cũng sẽ ko bằng dbms chuyên nghiệp (do nó cho phép lập index).
Bài liên quan
0