السلام عليكم،
مثلا لدي ملف نصي مرتب كالتالي :
فاريد ان استخرج الجزء رقم 2 من الملف1
عنوان-1
نص
عنوان -2
نص
عنوان-3
نص
2
عنوان-1
نص
عنوان -2
نص
عنوان-3
نص
...
ثم
استخرج العنوان-1 و العنوان-2 والعنوان-3 مع نصوصهم منفصلين كل على حدى ؟
شكراً.
السلام عليكم،
مثلا لدي ملف نصي مرتب كالتالي :
فاريد ان استخرج الجزء رقم 2 من الملف1
عنوان-1
نص
عنوان -2
نص
عنوان-3
نص
2
عنوان-1
نص
عنوان -2
نص
عنوان-3
نص
...
ثم
استخرج العنوان-1 و العنوان-2 والعنوان-3 مع نصوصهم منفصلين كل على حدى ؟
شكراً.
__________________
مجلتي الصغيرة
تفضل أخي هذا هو الكود
المتغيرات المهمة في الكودكود PHP:<?php
$handle = @fopen("inputfile.txt", "r");
$startprocessing = false;
$linecount = 0;
$titleandTestSegmentLinesCount = 2;
$titleOfSecondSection = "2";
$titles = new Array();
$texts = new Array();
if ($handle) {
while (($buffer = fgets($handle, 4096)) !== false) {
if($startprocessing){
if(($linecount % titleandTestSegmentLinesCount) == 0)
$titles[] = $buffer;
else
$texts[] = $buffer;
$linecount++;
}
if($buffer == $titleOfSecondSection)
$startprocessing = true;
}
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}
?>
و تعني أن عدد الأسطر للعنوان و النص معا هو 2كود PHP:$titleandTestSegmentLinesCount = 2;
و تعني أن القسم الثاني من الملف يبدأ عندما نجد سطر يحتوي فقط على النص 2كود PHP:$titleOfSecondSection = "2";
طبعا عليك تغيير اسم الملف
لم أجرب الملف لكن ان شاء الله يعمل معك
في حفظ الله
__________________
http://servarica.com
Xen VPS and WHMCS Xen Management Addon modules
support@servarica.com
أهلا أخي idontknow
الكود يحتاج لبعض التعديل.
لان سطور القسم المراد استخراجه كانت تخزن بالتناوب بين الجدول title والجدول texts.
قمت ببعض التعديل ولكن الناتج دائما يكون فارغا.
فأين الخلل مشكورين؟
:con2:كود PHP:<?php
$handle = fopen("txt3.txt", "r");
$startprocessing = false;
$linecount = 0;
//$d = date("d");
$d=2;
$titleandTestSegmentLinesCount = $d;
$titleOfSecondSection = $d;
$titles = array();
$texts = array();
$sect = array("proverbe", "anecdote", "dicton", "idée");
if ($handle) {
while (($buffer = fgets($handle, 4096)) !== false) {
if($startprocessing){
if (in_array(trim($buffer), $sect)){
$section = $buffer;
echo "section = ".$section."<br />";
}
switch ($section){
case "proverbe": $proverbe[] = $buffer;
case "dicton" : $dicton[] = $buffer;
case "anecdote": $anecdote[] = $buffer;
case "idée" : $idee[] = $buffer;
}
}
if($buffer = $titleOfSecondSection){
$startprocessing = true;
}
$linecount++;
}
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}
echo "<h4>count proverbe = ".count($proverbe)."</h4>";
echo "<pre>";
print_r($proverbe);
echo "</pre>";
echo "<br /><br />";
echo "<h4>count anecdote = ".count($anecdote)."</h4>";
echo "<pre>";
print_r($anecdote);
echo "</pre>";
echo "<br /><br />";
echo "<h4>count dicton = ".count($dicton)."</h4>";
echo "<pre>";
print_r($dicton);
echo "</pre>";
echo "<br /><br />";
echo "<h4>count idée = ".count($idee)."</h4>";
echo "<pre>";
print_r($idee);
echo "</pre>";
?>
التعديل الأخير تم بواسطة apitos ; 23-07-2011 الساعة 10:27 PM
__________________
مجلتي الصغيرة
تفضل أخي
هذا يعمل ان شاء الله
و ان لم يعمل أرسل لي معه ملف التكست الذي تجرب عليه لأتأكد من الحل
كود PHP:<?php
$handle = fopen("txt3.txt", "r");
$startprocessing = false;
$linecount = 0;
//$d = date("d");
$d=2;
$titleandTestSegmentLinesCount = $d;
$titleOfSecondSection = $d;
$titles = array();
$texts = array();
$proverbe = array();
$dicton = array();
$anecdote = array();
$idee = array();
$sect = array("proverbe", "anecdote", "dicton", "idée");
$section = "";
if ($handle) {
while (($buffer = fgets($handle, 4096)) !== false) {
if($startprocessing){
switch ($section){
case "proverbe":
$proverbe[] = $buffer;
break;
case "dicton" :
$dicton[] = $buffer;
break;
case "anecdote":
$anecdote[] = $buffer;
break;
case "idée" :
$idee[] = $buffer;
break;
}
if (in_array(trim($buffer), $sect)){
$section = $buffer;
echo "section = ".$section."<br />";
}
}
if($buffer == $titleOfSecondSection){
$startprocessing = true;
}
$linecount++;
}
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}
echo "<h4>count proverbe = ".count($proverbe)."</h4>";
echo "<pre>";
print_r($proverbe);
echo "</pre>";
echo "<br /><br />";
echo "<h4>count anecdote = ".count($anecdote)."</h4>";
echo "<pre>";
print_r($anecdote);
echo "</pre>";
echo "<br /><br />";
echo "<h4>count dicton = ".count($dicton)."</h4>";
echo "<pre>";
print_r($dicton);
echo "</pre>";
echo "<br /><br />";
echo "<h4>count idée = ".count($idee)."</h4>";
echo "<pre>";
print_r($idee);
echo "</pre>";
?>
__________________
http://servarica.com
Xen VPS and WHMCS Xen Management Addon modules
support@servarica.com
لم يعمل للاسف.
الملف النصي مرفق في مشاركتي السابقة.
شكرا مسبقاً.
__________________
مجلتي الصغيرة
أعذرني أخي لم أنتبه للملف المرفق
قد طورت السكريبت و هي تعمل كما تريد تمام
تأذ قسم واخد من الملف وهو القسم رقم 2
ثم تعبئ في كل مصفوفوة الأستطر التالبعة لهذا العنوان داخل القسم 2 فقط
ان كنت تريد تعديل على كيفية عملها فأبلغني
كود PHP:<?php
$handle = fopen("txt3.txt", "r");
$startprocessing = false;
$linecount = 0;
//$d = date("d");
$d=2;
$titleandTestSegmentLinesCount = $d;
$titleOfSecondSection = "2";
$titles = array();
$texts = array();
$proverbe = array();
$dicton = array();
$anecdote = array();
$idee = array();
$sect = array("proverbe", "anecdote", "dicton", "idée");
$section = "";
if ($handle) {
while (($buffer = fgets($handle, 4096)) !== false) {
if(trim($buffer) == ""){
$startprocessing = false;
}
if($startprocessing){
if(!in_array(trim($buffer), $sect)){
switch ($section){
case "proverbe":
$proverbe[] = $buffer;
break;
case "dicton" :
$dicton[] = $buffer;
break;
case "anecdote":
$anecdote[] = $buffer;
break;
case "idée" :
$idee[] = $buffer;
break;
}
}
if (in_array(trim($buffer), $sect)){
$section = trim($buffer);
echo "section = ".$section."<br />";
}
}
if(trim($buffer) == $titleOfSecondSection){
$startprocessing = true;
}
}
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}
echo "<h4>count proverbe = ".count($proverbe)."</h4>";
echo "<pre>";
print_r($proverbe);
echo "</pre>";
echo "<br /><br />";
echo "<h4>count anecdote = ".count($anecdote)."</h4>";
echo "<pre>";
print_r($anecdote);
echo "</pre>";
echo "<br /><br />";
echo "<h4>count dicton = ".count($dicton)."</h4>";
echo "<pre>";
print_r($dicton);
echo "</pre>";
echo "<br /><br />";
echo "<h4>count idée = ".count($idee)."</h4>";
echo "<pre>";
print_r($idee);
echo "</pre>";
?>
__________________
http://servarica.com
Xen VPS and WHMCS Xen Management Addon modules
support@servarica.com
يعمل بكفاءة عالية اخي الكريم.
يبقى جمع المصفوفات الناتجة في متغيرة لعرضها.
__________________
مجلتي الصغيرة
الكود التالي سوف يستخرج اي قطعة نصية تبدأ برقم + سطر جديد + كلمة + سطر جديد + نص + سرط جديد مرتين ... علما ان السطر الجديد في الملف المرفق هو \r\n وليس \n
كود PHP:$data = file_get_contents('/tmp/txt3.txt');
preg_match_all('#(\\d+)\r\n(.+)\r\n(.+)\r\n\r\n#Us', $data, $out);
print_r($out);
__________________
ضيف الله العتيبي مبرمج حر و مهندس معتمد من زيند (ZCE)
الاتصال: daif@daif.net او جوال: 0556639884
الخدمات: تقديم استشارات برمجيه, تطوير بوابات/خدمات إلكترونيه للقطاع العام او الخاص .
أخي ضيف،
بارك الله فيك.
فالامر مع التعابير القياسية مشوق ومختصر.
ولكن هل يمكن التفضيل اكثر كما في الكود السابق للاخ idontknow ؟
شكراً.
__________________
مجلتي الصغيرة
اخي daif
هذا الكود من منتدى اجنبي، يقوم يجلب القسم 2
ولكن ينقصه لتمام العمل واسخراج الاجزاء الاربعة الباقية باستعمال نفس طريقة التعابير القياسية.
فخل ممكن المساعدة ؟
شكراً.
كود PHP:<?php
define('FILE', 'txt.txt');
//$d=date("d");
$d='2';
$exist = false;
$file = file_get_contents(FILE);
$aDay = preg_split("/(\r|\n|\r\n){4,}/", $file); // 1 case / day
// echo var_export($aDay,true);
foreach($aDay as $index=>$Day){
if(preg_match('/^'.$d.'(\r|\n|\r\n){2,}/', trim($Day))){
$exist = true;
echo $Day;
}
}
?>
__________________
مجلتي الصغيرة