• 0
اورنج مان

[تنبيه : عنوان غير مناسب]مشكله بيسطه .. لمحترفين وصعبه للمبتدئين مثلي نرجو الحل

سؤال

السلام عليكم

اليوم برمجة كود حلو وصغير

$name = $ARGV[0]; #  File
$safe = $ARGV[1];
open (USERFILE, ">$name") || die "Can't open file ";
@LISTS = <USERFILE>;
close USERFILE;
foreach my $L (@LISTS) {
chomp $L;
$list = $L;
}
open (SAFEFILE, ">$safe");
if($list =~ m/(.*?):saa:/) {
print SAFEFILE $1;
close SAFEFILE;
}

طريقة عمله

perl file.pl text.txt safe.txt

محتوى ملف text.txt

 eeee:saa:
arab:saa:
lllllllllllll:saa:
fffffff:saa:

طيب لما اشغل الاداه تشتغل عادي وتمام وتستخرج عادي لكن المشكله

لما افتح ملف المحفوظ safe.txt

اجد محتواه

fffffff

بس وانا ابغاه يحفظ

eeee

arab

llllllllllllll

ffffffff

بلترتيب نرجو الحل تكفون

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

6 إجابة على هذا السؤال .

  • 0

اكتب على الملف في مود الإضافة


>>

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

المشكلة ليست مودات الاضافة لانها كلها ستؤدي لنفس الغرض (الفرق سيكون فقط عندما يتم استدعاء الاسكربت من جديد)

>
>>

المشكلة هي هنا فقيمة $list دائما مساوية لقيمة آخر $L وليس هذا المطلوب من الكود على مايبدو

$list = $L;

يجب تبديلها ب

$list = $L."\n".$list;

هذا اقرب شيء ليعمل في الاسكربت.. ممكن تحويله لشيء اكثر نظافة لكن سيؤدي لتغييرات اخر

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

للاسف لم تحلو مشكلتي .. وولكن تم حلها

sub file_get_contents

فقط (:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مستحيل... sub file_get_contents لا يقوم بشيء سوى انه يقوم بانشاء subroutine معين و في كودك لا يوجد subroutine اسمه file_get_conents

انت الذي قمت به هو تغيير جذري في برنامجك

كان ممكن تقوم بنفس الشيء بواسطة التغييرات التي قلتلها لك مع تعديل طفيف جدا.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مستحيل... sub file_get_contents لا يقوم بشيء سوى انه يقوم بانشاء subroutine معين و في كودك لا يوجد subroutine اسمه file_get_conents

انت الذي قمت به هو تغيير جذري في برنامجك

كان ممكن تقوم بنفس الشيء بواسطة التغييرات التي قلتلها لك مع تعديل طفيف جدا.

ماضبطت سويت نفس طريقتك ..!!

+

لو طريقتك ضبطة اكتب الكود كامل + جرب الطريقه

اما بلنسبه لـsub file_get_contents

تعال شوف




$name = $ARGV[0]; # open File
$safe = $ARGV[1]; # save File
$etc_passwd = file_get_contents($name);

open(USERSFILE, ">>$safe");

while( $arab2000 =~ m{(.*?):saa:(.*)}g ) {

print USERSFILE $1."\n";

}

close(USERSFILE);

# function
sub file_get_contents{
my $filename = $_[0];
open(INFO, $filename);
@lines = <INFO>;
close(INFO);
my $string = "";
foreach (@lines){
$string .= $_;
}
return $string;
}
# _e0F_ !

E0F

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

كذاب

المشكلة ان كودك الاولي كان يحتوي على مشاكل عبيطة اخرى

والمسالة لا تشترط استخدام subroutine

هذا هو كودك القبيح بعد عملية تجميلية سريعة

$name = $ARGV[0]; #  File
$safe = $ARGV[1];
open (USERFILE, "<$name") || die "Can't open file ";
@LISTS = <USERFILE>;
close USERFILE;
open (SAFEFILE, ">$safe");
foreach my $L (@LISTS) {
if($L =~ m/(.*?):(.*?):\n/) {
print $1,"\n";
}
}
close SAFEFILE;

كودك الثاني ايضا غبي

لماذا تقوم بopen و close على كل ملف؟

هذا سيزيد عدد الsystem calls... والsystem calls دائما بطيئة

والفارق في السرعة كبيــــــر وملحوظ على مستوى العين البشرية

ولهذا السبب وضعت لك open/close خارج الloop بعد عملية التجميل

تصحيح:

* "كل ملف" = "كل سطر"

ملاحظة:

* من باب التبسيط جعلته يطبع على stdout حتى لا تذهب لتفتح ملف اخر حتى ترى الناتج

الله يهديك يااخوي .. انا مبتدى في البيرل ولا استحق كلمة كذاب ..!!

+

انا الي سويتها اني اهم شئ سوية الاداه الي ابغاها ..

والحمد لله نجحة مع ان الاكواد مالها اي صله يعني مجرد تركيب وصدفه ضبطت

مسئلة ان كودي قبيح الحمد لله مابرمجته الا لي هدف منه وهو

cat /etc/passwd

لتصفية اليوزرات في ملف etc/passwd

وهذا شئ نستفيد من احنا الهاكرز .. بكثره

مسئلة السرعه والبطئ ماتهمني ابدا على العموم شاكر لك تصحيحك لي والله يعطيك العافيه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .