PDA

View Full Version : سوال: پاک کردن از فایل txt



mamali-mohammad
پنج شنبه 14 دی 1391, 18:13 عصر
سلام
ما یه مقدار داریم :

$text='mohammad,ali,hossen,abbas,ghader,shahin,rez a,jasem';
حالا یه فایل txt هم داریم که اینا توشته :

mohammad
ali
soheil
kobra
hossen
abbas
nader
ghader
farid
farnood
shahin
reza
jasem
behdad

میخوام یه دستور بنویسم که اگه اجرا شد اونایی که در فایل txt اضافای هستن پاک بشه
یعنی بیاد از مقدار text$ بررسی کنه و اونایی که توی text$ نیست رو پاک کنه
طبق این مثال باید خروجی فایل txt این باشه :


mohammad
ali
hossen
abbas
ghader
shahin
reza
jasem

ممنون

$ M 3 H R D A D $
پنج شنبه 14 دی 1391, 18:54 عصر
فایل txt و به file_get_contents بخون
و به \r\n و تابع explode هر خطو بگیر بریز تو آرایه
با تابع explode و اراکتر , ویرگول اون $text و هم بریز تو آرایه
با تابع array_merge این ددو تا آرایه و یکی کن
با تابع array_unique تکراری ها و حذف کن در آرایه

mamali-mohammad
پنج شنبه 14 دی 1391, 19:17 عصر
ممنون
میشه کدشو بدی ؟

MMSHFE
پنج شنبه 14 دی 1391, 23:11 عصر
دقت کنید که میشه با تابع file مستقیماً محتوای یک فایل رو بصورت یک آرایه خوند (هر سطر میشه یک خونه آرایه)


$text = 'mohammad,ali,hossen,abbas,ghader,shahin,reza,jase m';
$values = explode(',', $text);
$file_values = file('info.txt');
$fp = fopen('info.txt', 'w');
foreach($file_values as $fv) {
if(in_array($fv, $values)) {
fwrite($fp, $fv . PHP_EOL);
}
}
fclose($fp);

موفق باشید.

$ M 3 H R D A D $
پنج شنبه 14 دی 1391, 23:23 عصر
$text = 'mohammad,ali,hossen,abbas,ghader,shahin,reza,jase m';
$values = explode(',', $text);
$file_values = file('info.txt');
$file_values = array_merge($file_values,$values);
$file_values = array_unique($file_values);
$file_values = implode("\r\n",$file_values);
file_put_contents("info.txt",$file_values);

MMSHFE
جمعه 15 دی 1391, 09:34 صبح
با سلام، آقا مهرداد فکر کنم کد شما جواب موردنظر ایشون نباشه. ایشون اشتراک دو آرایه موجود در متغیر و فایل رو میخوان ولی کد شما اجتماعشون رو داره توی فایل ذخیره میکنه. منظورم اینه که ایشون میخوان از توی فایل، هرچی که توی متغیر نیست حذف بشه ولی کد شما، هرچی که فایل کم داره رو بهش اضافه میکنه. فکر میکنم تابع array_intersect برای کار ایشون مناسب باشه. لطفاً بررسی کنید.

$ M 3 H R D A D $
جمعه 15 دی 1391, 12:13 عصر
درسته حرف شما من فک کردم منظورشون از اضافی این کاری که من کردم هست اما کد من دقیقا برعکس و میده

$ M 3 H R D A D $
جمعه 15 دی 1391, 12:28 عصر
با احترام به نظر مدیر محترم تابع file مقادیری که بر می گردونه همراه با یک خط اضافی هستند یعنی یک \n فک کنم ( تست نکردم کامل ) واسه همین نام محمد در فایل با نام محمد در اون رشته مساوی نیست یعنی نیاز داشت که trim بشه شاید یک سری option داشته باشه بازم نمیدونم چون داشت کد دیگه مینوشتم

این کد هم همون کاری که دوستمون می خواد و انجام میده
آخرش میریزه تو فایل و کامنت کردم که درستش کن داشتم تست میکردم هی داده اولیه از بین میرفت : دی

<?php
$text = 'mohammad,ali,hossen,abbas,ghader,shahin,reza,jase m';
$values = explode(',', $text);
$file_values = file_get_contents("info.txt");
$file_values = explode("\r\n",$file_values);
$file_values = array_merge($file_values,$values);
$file_values = array_diff_assoc($file_values,array_unique($file_v alues));
print_r($file_values);
//$file_values = implode("\r\n",$file_values);
//file_put_contents("info.txt",$file_values);

?>

$ M 3 H R D A D $
جمعه 15 دی 1391, 12:30 عصر
اینم با تابع array_intersect که آقای شهرکی فرمودند :

<?php
$text = 'mohammad,ali,hossen,abbas,ghader,shahin,reza,jase m';
$values = explode(',', $text);
$file_values = file_get_contents("info.txt");
$file_values = explode("\r\n",$file_values);
$file_values = array_intersect($file_values, $values);
print_r($file_values);
//$file_values = implode("\r\n",$file_values);
//file_put_contents("info.txt",$file_values);

?>

mamali-mohammad
جمعه 29 دی 1391, 00:07 صبح
اقا هیچ کدوم کار نکردن

MMSHFE
جمعه 29 دی 1391, 00:17 صبح
مطمئنید کدی که من گذاشتم هم کار نکرد؟

$ M 3 H R D A D $
جمعه 29 دی 1391, 00:23 صبح
من هم کد خودم و هم کد آقای شهرکی و گذاشتم براتون و تست هم کردم

mamali-mohammad
جمعه 29 دی 1391, 00:50 صبح
اره
روی لوکال تست کرم

mamali-mohammad
شنبه 30 دی 1391, 11:50 صبح
آقای شهرکی طبق کد شما فقط jasem موند
بقیه حذف میشه

MMSHFE
شنبه 30 دی 1391, 11:59 صبح
اینو امتحان کنید:


<?php
$text = 'mohammad,ali,hossen,abbas,ghader,shahin,reza,jase m';
$values = explode(',', $text);
$file_values = file('info.txt');
$fp = fopen('output.txt', 'w');
foreach($file_values as $fv) {
if(in_array(trim($fv), $values)) {
fwrite($fp, $fv . PHP_EOL);
}
}
fclose($fp);
?>

mamali-mohammad
شنبه 30 دی 1391, 12:15 عصر
ممنون این ردیف شد
اما چرا یه enter اضافه میشه ؟
روی لوکال اینطوریه یا روی هاست اوکی میشه ؟
ممنون

$ M 3 H R D A D $
شنبه 30 دی 1391, 12:47 عصر
اینتر اصافه میشه باید trim بشه
کد من ج نداد به شما ؟

mamali-mohammad
شنبه 30 دی 1391, 12:58 عصر
نه از شما جواب نداد
فقط این کد اقای شهرکی enter اضافش برداشته بشه ردیفه

MMSHFE
شنبه 30 دی 1391, 13:01 عصر
بجای PHP_EOL از "n\" استفاده کنید.

$ M 3 H R D A D $
شنبه 30 دی 1391, 13:58 عصر
<?php
$text = 'mohammad,ali,hossen,abbas,ghader,shahin,reza,jase m';
$values = explode(',', $text);
$file_values = file("info.txt");
$file_values = array_map('trim', $file_values);
$file_values = array_merge($file_values,$values);
$file_values = array_diff_assoc($file_values,array_unique($file_v alues));
print_r($file_values);
//$file_values = implode("\r\n",$file_values);
//file_put_contents("info.txt",$file_values);

?>

http://sorbmarkazi.com/eshterak.php

mamali-mohammad
شنبه 30 دی 1391, 15:08 عصر
بجای PHP_EOL از "n\" استفاده کنید.

ممنون ردیف شد
$ M 3 H R D A D $ ممنون از شما

MMSHFE
پنج شنبه 05 بهمن 1391, 15:14 عصر
منظورتون اینه که تاپیک حذف بشه؟ میشه دلیلش رو بگین؟ شاید این مشکل برای خیلیها پیش بیاد.

mamali-mohammad
پنج شنبه 05 بهمن 1391, 15:23 عصر
نه منظورم فقط همون پست شماره 22 بود
اشتباه ارسال شد
تاپیک باشه موردی نداره