الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مقارنة بين ملفين نصيين

مغلق
بدأه ospx في 27 ديسمبر 2007 · 13 رد · 1,279 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اذا كان لدينا ملف نصي يحوي ارقام التالية

222222

111111

333333

666666

123456

وملف نصي اخر يحوي الارقام التالية

222222

999999

123456

584712

658479

فهل يمكن المقارنة بين الملفين من حيث الارقام المتشابهة اي يتم فرز الارقام الغير متشابهة بين الملفين لوحدها ويقوم بحذف الارقام المتشابهة

اي اريد فقط عند لصق ارقام جديدة على الملف الاول وموجود مثلها في هذا الملف ان يقوم بحذف المتشابهة

وابقاء الجديدة فقط

ودمتم لنا بالخير وبارك الله بكم

#2

عليكم السلام

لاشيء مستحيل يا أخي:

إليك الكود التالي جاهز وما عليك إلا وضعه في فورم

الكود سيقوم بإنشاء الملفات وإجراء المقارنة عليها حيث أنه سيقوم بنقل محتوى الملف الثاني إلى الملف الأول

وحذف العبارات المتكررة,تستطيع استبدال مراقع الملفات بالملفات التي تريدها:

Private Sub Form_Load()
Open App.Path & "\1.txt" For Output As 1
Print #1, 222222
Print #1, 111111
Print #1, 333333
Print #1, 666666
Print #1, 123456
Close 1
Open App.Path & "\2.txt" For Output As 1
Print #1, 222222
Print #1, 999999
Print #1, 123456
Print #1, 584712
Print #1, 658479
Close 1
'الكود السابق كله بغية إنشاء الملفات  من أجل المقارنة بينها
Dim a
Dim pricom As Boolean
Open App.Path & "\2.txt" For Input As 1
Do While Not EOF(1)
pricom = True
Input #1, a
Open App.Path & "\1.txt " For Input As 2
Do While Not EOF(2)
Input #2, b
If b = a Then
pricom = False
Close 2
Exit Do
End If
Loop
Close 2
If pricom = True Then
Open App.Path & "\1.txt" For Append As 2
Print #2, a
Close 2
End If
Loop
MsgBox "وحذف التكرار" & App.Path & "\1.txt" & " إلى الملف " & App.Path & "\2.txt" & "تم إضافة الملف "
MsgBox "وتحقق بنفسك" & App.Path & "\1.txt" & "افتح الملف "
End Sub

Doried Abd Allah

Prelware D&D Association

Lattakia/Syria

#3

اخي العزيز دريد فعلا انت اكثر من رائع ماشاء الله عليك ولكن لو تكرمت علي :

1-لو كان الملفين النصيين 1.txt و 2.txt يحتويان عددكبيرجدا من الارقام المتشابهة او الغير متشابهة في الملفين

كيف يتم التعامل مع هذه الحالة

2-كيف نستطيع عن طريق الاداة commondialog ان نستدعي الملفين النصيين مهما يكن مكان الملفين في الحاسب

اي ليس فقط ان مقيد ان يكون الملفين النصيين في مسار البرنامج وانما في في اي مكان في الحاسب

3- ايضا عن طريق اداة commom dialog كيف استطيع حفظ الملف الذي عالجناه بعد المقارنة في اي مكان اريده في الحاسب

ولو ممكن ان يكون الملف النهائي بعد المقارنة هو ملف نصي ثالث نحفظه اينما نريد

مع المحافظة على الملفين النصيين السابقين

واكون ممنون الك وشاكر لجهودك

#4

هذه المداخلة فقط لتبيين الفرق بين عام 1998 و عام 2008

ما تريده يمكن عمله في هذه السنة الجديدة بالكود التالي :

Dim List1 As String() = File.ReadAllLines("c:\list1.txt")
Dim List2 As String() = File.ReadAllLines("c:\list2.txt")
Dim DifferenceQuery = List1.Except(List2)
Console.WriteLine("Elements That are in the List1 and not in List2")
For Each Element In DifferenceQuery
Console.WriteLine(Element)
Next
Console.ReadKey()

البحث عن الاختلافات بين لائحتين بواسطة ال Linq

#5

مرحبا

بالنسبة للأخ أيوب,هو مشكور على مشاركته المفيدة ,لكني بصراحة أفضل أن أكتب برامجي بنفسي بشكل كامل دون استخدام أي دوال جاهزة

أما بالنسبة للأخ ospx :

1-أعتقد أن هذا الكود شامل لجميع الملفات مهما كان حجمها

2- 3-Common Dialog لقد قمت بإعادة كتابة الكود السابق بما ينسجم مع متطلباتك,لاحظ طريقة استخدام أداة الحوار الشائعة

إليك الكود الجاهز فقط أنشئ فورم ضع فيه أداة كومون دايالوغ واكتب الكود التالي فقط:

Private Sub Form_Load()
On Error GoTo errsub
MsgBox "حدد مكان لحفظ الملف الذي سيحتوي على العبارات الغير متشابهة بين الملفين"
CommonDialog1.CancelError = True
CommonDialog1.ShowSave
SaveLocation = CommonDialog1.FileName
MsgBox "حدد الملف الأول"
CommonDialog1.ShowOpen
File1Location = CommonDialog1.FileName
MsgBox "حدد الملف الثاني"
CommonDialog1.ShowOpen
File2Location = CommonDialog1.FileName
' الكود السابق لتحديد ملف النتائج(العبارات الغير متشابهة)و الملفان الأول والثاني
Dim a
Dim pricom As Boolean

Open SaveLocation For Output As 4
Open File1Location For Input As 1
Do While Not EOF(1)
Input #1, v
Write #4, v
Loop
Close 1
Open File2Location For Input As 1
Do While Not EOF(1)
pricom = True
Input #1, a
Open File1Location For Input As 2
Do While Not EOF(2)
Input #2, b
If b = a Then
pricom = False
Close 2
Exit Do
End If
Loop
Close 2
If pricom = True Then
Print #4, a
Close 2
End If
Loop
Close 4
MsgBox "Done..!  تم المطلوب"
MsgBox "وتحقق بنفسك" & SaveLocation & "افتح الملف "

Exit Sub ' للخروج من الإجراء دون تنفيذ الكود المخصص عند حصول الأخطاء في حالة تم البرنامج بشكل نظامي

errsub:
MsgBox "Ctrl+Break حدث خطأ ما على الأغلب في اختيار الملفات,ستتم إعادة تشغيل البرنامج للإنهاء اضغط"
Form_Load
End Sub

Doried Abd Allah

Prelware D&D Association

Lattakia/Syria

#6

ماذا تعني بالدوال الجاهزة ؟؟؟؟

الكود الذي طرحته كل الأكواد الموجودة فيه تأتي في ال FrameWork الخاص ببيئة الدوت نت يعني لو كنت تقصد أن

List1.Except(List2)

فاسمح لي أن أقول لك ان :

Open

و التي تفتح بها الملفات هي أيضا دالة جاهزة :D

أتمنى ان يكون المعنى وصل

#7

بارك الله فيك يادريد عبدالله فعلا معلومات مفيدة

أولا -- لست أرى السعادة جمع مال ** ولكن التقي هو السعيد

ثانيا-- وإن ضاق رزق اليوم فاصبر إلى غد *** عسى نكبات الدهر عنك تزول

ثالثا-- أصون عرضي بمالي لا أدنسه *** لا بارك الله بعد العرض بالمال

وأخيرا -- قال تعالى ( يوم لا ينفع مال ولا بنون إلا من أتى الله بقلب سليم )

#8

الف الف الف شكر وتقدير الى الغالي دريد وكل الاخوة الذين ساعدونني

والله يزيدك دائما بمعلومات وفيرة ومفيدة والى الامام دائما

#9

اخي العزيز هل يمكن الارقام المتشابهة في الملفين ان يتم حذفها نهائيا عند الحفظ في

ملف ثالث بعد المقارنة اي لا نضيف الارقام المختلفة في الملف الثاني الى الملف الاول فقط

وانما كل الارقام المتشابهة بين الملفين يتم حذفها مع ابقاء الارقام المختلفة

يعني لو وجدنا رقم مكرر في الملفين يتم حذفه وهكذا

والله يكون معك دائما اخي

اسف كثير لكثرة الاسئلة

#10

لا تنسونا يا اخوة دريد العزيز والاخوة الاعزاء الاخرين

#11

يا اخوان دالة وحيدة فى الفى بى يمكنها ان تقوم بالبحث وارجاع نتيجة المقارنة

Instr()

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#12

كيف اخي سنطبق هذه الدالة على الكود الذي وضعه الاخ دريد

#13

الاخوة العباقرة الرجاء المساعدة

يرجى التعديل على كود الاخ دريد عبدالله من اجل السؤال السابق بحيث يوجد ملفين نصيين الاول مثلا

111111

222222

333333

565656

252525

وملف ثاني يحوي نفس ارقام الملف الاول مضاف اليها بعض الارقام الاخرى

111111

222222

333333

565656

252525

951951

123456

147147

التعديل الذي اريده على الكود هو عند المقارنة والحفظ في ملف نصي ثالث ان يكون الملف النصي الثالث بعد المقارنة هو

951951

123456

147147

اي الارقام المتشابهة بين الملفين حذفت نهائيا وتم حفظ ملف نصي ثالث يحوي الارقام المختلفة فقط

واعذروني على طرح السؤال مرة اخرى لانني حاولت كثير دون جدوى واعتذر خصوصامن الاخ دريد لانه هو من اعطاني الكود وان تكرم هو والاخوة ان يتابعوا معي في هذا السؤال

والف شكر الكم جميع لكل الذين يضعون الحلول ولكل الاخوة الذين طرحوا ردودهم واجابوني

اسف مرة اخرى

#14

لا تآخذني أخي الكريم على التأخر في الرد,الحقيقة أنا بهالأوقات عندي امتحانات معلومك أنا عندي شهادة هي السنة,لم أستطع

الرد على سؤالك حتى الآن,أعد كتابة الكود السابق على الشكل التالي:

Private Sub Form_Load()

On Error GoTo errsub

MsgBox "حدد مكان لحفظ الملف الذي سيحتوي على العبارات الغير متشابهة بين الملفين"

CommonDialog1.CancelError = True

CommonDialog1.ShowSave

SaveLocation = CommonDialog1.FileName

MsgBox "حدد الملف الأول"

CommonDialog1.ShowOpen

file1location = CommonDialog1.FileName

MsgBox "حدد الملف الثاني"

CommonDialog1.ShowOpen

file2location = CommonDialog1.FileName

' الكود السابق لتحديد ملف النتائج(العبارات الغير متشابهة)و الملفان الأول والثاني

Dim a

Dim pricom As Boolean

cc = 0

ss:

If cc = 1 Then

Open SaveLocation For Append As 4

Else

Open SaveLocation For Output As 4

End If

Open file2location For Input As 1

Do While Not EOF(1)

pricom = True

Input #1, a

Open file1location For Input As 2

Do While Not EOF(2)

Input #2, b

If b = a Then

pricom = False

Close 2

Exit Do

End If

Loop

Close 2

If pricom = True Then

Print #4, a

Close 2

End If

Loop

Close 4

Close 2

Close 1

ssd = file1location

file1location = file2location

file2location = ssd

If cc = 0 Then

cc = 1

GoTo ss

End If

MsgBox "Done..! تم المطلوب"

MsgBox "وتحقق بنفسك" & SaveLocation & "افتح الملف "

Exit Sub ' للخروج من الإجراء دون تنفيذ الكود المخصص عند حصول الأخطاء في حالة تم البرنامج بشكل نظامي

errsub:

MsgBox "Ctrl+Break حدث خطأ ما على الأغلب في اختيار الملفات,ستتم إعادة تشغيل البرنامج للإنهاء اضغط"

Form_Load

End Sub

Doried Abd Allah

Prelware D&D Association

Lattakia/Syria

هذا الموضوع مغلق.

مواضيع مشابهة