PDA

View Full Version : سوال: خواندن خط به خط فایل و ذخیره در array



seyed.mehdi
شنبه 12 مهر 1393, 18:47 عصر
سلام
من توی پروژه ای که دارم یک فایل متنی وجود داره که به طور مثال اطلاعات زیر داخلشه


مهدی مصطفوی
علی کاظمی
علیرضا طاهری
مهدی عطاریه
جواد عرب

توی این فایل اسمی با فامیلی وجود داره که بین اسم و فامیل فاصله هستش
میخوام یه فایل php بسازم که اسم ها رو جدا بخونه و فامیلی ها رو جدا
یا هر طوری میخونه اسم های توی یه array مثلا name شذخیره بشه و فامیلی های هم توی array جدا
البته اگر طوری باشه که بین اسم و فامیلی ها هم حتما نیاز به یک فاصله باشه مشکلی نیست
و بگم که این فایل متنی شامل 200 اسم هستش

Unique
شنبه 12 مهر 1393, 18:52 عصر
با تابع file (http://php.net/manual/en/function.file.php) میتونی این کار را انجام بدی !
اما میدونی بعضی فامیل ها یا اسم ها بیش از یک space میخوره ؟‌مثلا چطور میخوای "محیمد رضا حاتمی کیا" را تشخیص بدی ؟
خروجی فایل باید مثلا اینطوری باشه :

علی;حسینی
سعید;محمد پور
محمد رضا;حاتمی کیا

وقتی با تابع file خوندی یک loop میندزای و با تابع explode نام و نام خانوادگی را تشخیص میدی.

seyed.mehdi
شنبه 12 مهر 1393, 19:04 عصر
میشه حداقل یه کدی قرار بدید لطفا

seyed.mehdi
شنبه 12 مهر 1393, 20:02 عصر
کسی نیست کمک کنه؟

aalmair
شنبه 12 مهر 1393, 20:33 عصر
header("Content-Type: text/html; charset=utf-8");





$fp=fopen('1.txt','r')or die('can not open file');

$file_str='';

while(!feof($fp))
{
$file_str.=fread($fp,100);
}
$names=$family=array() ;
if(strlen($file_str))
{
$a=explode("\n",$file_str) ;

for($i=0;$i<count($a);$i++)
{
if(strlen(trim($a[$i])))
{
$b=explode(" ",$a[$i]) ;
$flag=0;
for($j=0;$j<count($b);$j++)
{
if(strlen(trim($b[$j])))
{

$names[]=$b[$j];


$temp_str="";
for($k=$j+1;$k<count($b);$k++)
{
if($k>($j+1))
{
$temp_str .= " " ;
}
$temp_str .= ($b[$k]) ;

}

$family[]=$temp_str;
break;



}

}
}

}
}
var_dump($names,$family) ;

Unique
شنبه 12 مهر 1393, 23:32 عصر
راستش من با کد گذاشتن خیلی مشکل دارم و به نظرم بید خود سوال کننده کد بنویسه و اگه مشکل داشت کد را بگذاره تا کمکش کنیم اما دوستمون خیلی لقمه را چرخونده ، این کارا برای چیه ؟
چرا وقتی توابع ساده و راحت هست اینطوری میکنید ؟ مگه دراین با زبانی مثل c یا پاسکال کد مینویسین ؟ (بیچاره پاسکال هم توابع مناسبی داره برای این کار)


$lines = file('path/to/file', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach($lines as $line){
$names = explode(" ",$line); //better to use ";" as delimiter when making the file
echo "<b>Name:</b> {$names[0]}";
echo "<br>";
echo "<b>Family:</b> {$names[1]}";
echo "<hr>";
}

aliphp1
یک شنبه 13 مهر 1393, 04:27 صبح
$data=explode("\n",$filedata);

hamedarian2009
یک شنبه 13 مهر 1393, 10:35 صبح
هر طوری میخونه اسم های توی یه array مثلا name شذخیره بشه و فامیلی های هم توی array جدا
میتونی از این هم استفاده کنی در صورتی که بین اسم و فامیلی ; بگزاری


$file = file('data.txt');

$name = array();
$family = array();
foreach ($file as $value) {
$arr = explode(';', $value);
array_push($name, $arr[0]);
array_push($family, $arr[1]);
}

print_r($name);
echo '<br />';
print_r($family);

seyed.mehdi
یک شنبه 13 مهر 1393, 20:44 عصر
ممنون ازaalmair (http://barnamenevis.org/member.php?309108-aalmair) و همه ی شما دوستان عزیز
حل شد