PDA

View Full Version : خواندن فایل متنی



Mr.Brown
دوشنبه 05 خرداد 1393, 18:41 عصر
با سلام،
یک فایل متنی با چنین داده هایی دارم:

name = "ali" family = "rezaee"
name = "ahmad" family = "hasani" age = "25"
name = "javad" family = "akbari" tahsilat = "lisans"

حالا چنین نتیجه ای در خروجی مدنظر هست:

name-family-tahsilat-age
------------------------------------
ali-rezaee-null-null
ahmad-hasani-null-25
javad-akbari-lisans-null

فقط می خوام با الگوریتم و راه صحیح خواندن داده های فایل متنی و تولید چنین نتیجه ای آشنا بشم. اگر لطف کنید راه و روش صحیح این کار را توضیح بدین همراه با توابع مورد نیاز ممنون می شم.

rezakho
سه شنبه 06 خرداد 1393, 00:53 صبح
<?php

$lines = explode("\n", str_replace("\r", "", file_get_contents("file.txt")));

foreach ($lines as $line)
{
$exprs = preg_split("/(?<=\")(\s)/", $line);

foreach ($exprs as $expr)
{
preg_match_all("/([^\=\s]+)\s\=\s\"([^\"]+)\"/", $expr, $matches);

$key = $matches[1][0];

$value = $matches[2][0];

// your code
}
}


خط 3
محتوای فایل تماما گرفته میشه، کاراکتر r\ از محتوا پاک میشه، محتوا با کاراکتر n\ به خطوط تقسیم میشه و داخی ارایه lines$ ریخته میشه

خط 5
آرایه lines$ پیمایش میشه

خط 7
هر خط به بخش هایی مثل name = "ahmad" تقسیم میشه و قسمت ها داخل exprs$ ریخته میشه

خط 9
آرایه exprs$ پیمایش میشه

خط 11
با یک عبارت باقاعده، قسمت name و value از متون جدا شده و در خطوط بعدی داخل متغیرهای مربوطه قرار داده میشند

ما بقی هم که دست خودتونه

Mr.Brown
سه شنبه 06 خرداد 1393, 21:53 عصر
خیلی ممنونم از پاسختان.
اما امکان داره در مورد Pattern ها توضیح دهید؟ مخصوصاً قسمت زیر که کلاً متوجه نشدم؛ البته میدانم که backslash را قبل از کوتیشن قرار دادید تا کاراکتر معنای خاصی نده اما مابقی رو متوجه نشدم.


(?<=\")

نقش علامت سوال و علامت کوچکتر مساوی چه معنایی دارد در الگو؟

rezakho
چهارشنبه 07 خرداد 1393, 09:49 صبح
الگو ها یکم پیچیده هستند
اگر عمر یاری بده، یک تاپیک در موردشون باز میکنم

ولی اون قسمتی که شما باش مشکل دارید، یعنی فاصله ای رو پیدا کن که قبلش " باشه، منتها " رو در تطبیق اعمال نمیکنه