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

البحث عن كلمة او نص كامل موجود في ملف نصي

بدأه sssalehooo في 5 نوفمبر 2008 · 4 رد · 1,266 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاتة

اولا يا اخواني لم استطع التسجيل منذو يومين بسبب التعقيدات في الكود السري حيث تظهر لي رسالة خطاء في الكود رغم اني متاكد من كتابة الكود صحيحة . وليست اول مرة تمر علية في بعض المنتديات . الان دخلت عن طريق كود كلة ارقام فقط لايوجد فية حروف قمت بالبحث عنة . اعتقد اصلا ليس لة داعي تضعون هذه الاكواد المعقدة .. مالفائده منها؟؟

هذة نصيحتي .. ولكم تحياتي

اما سؤالي :قمت بتحميل برنامج دلفي7 ولكني لم اجد

Form Wizard

ولا Database في القائمة

كيف احصل عليها واضافتها ؟؟

السؤال الثاني : ابي اصصم برنامج يقوم بالبحث عن كلمة او نص كامل موجود في ملف نصي في العمود الاول ويعطيني الناتج من العمود الثاني بحيث يتكون الملف النصي من عمودين مثلا عمود عربي والثاني انجليزي . السلفة اني ابي اصمم قاموس عربي انجليزي لترجمة النصوص وليست الكلمات فقط .

ارجو ان اجد اجوبة لاسالتي لديكم .. ولكم اجمل تحية

عاد حنا مبتدئين الله يعينكم علينا .. تحملونا شوي

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 5 نوفمبر 2008 في 11:06

#2

ولا احد رد ؟؟؟ شكلي ابعتزل الدلفي واشوفلي لغة ثانية ..

#3

إقرأ هذا الموضوع

/index.php?showtopic=158043

#4

السلام عليكم

أجيبك على قدر معرفتي ,,

اقتباس
السؤال الثاني : ابي اصصم برنامج يقوم بالبحث عن كلمة او نص كامل موجود في ملف نصي في العمود الاول ويعطيني الناتج من العمود الثاني بحيث يتكون الملف النصي من عمودين مثلا عمود عربي والثاني انجليزي .

يوجد مكون لا يحضرني اسمه الآن ,,

مكون للبحث

إبحث عنه قليلا وإن شاء الله تجدهـ ,,

بالتوفيق

#5

السؤال الأول

هناك أخي أكثر من إصدارة للدلفي7

Personal

هدفها الوافدين الجدد لدلفي وليس المطورين ولا تدعم برمجة قواعد البيانات ولا أية ميزة متقدمة لدلفي

وهناك

Professional Studio , Enterprise Studio , Architect Studio ولكل منها مستوا

هذا كود يقوم بالبحث عن نص ويعيد موقعه

للأمانة إسم المولف حسب الموقع : P. Below

function ScanFile(const FileName: string;
  const forString: string;
  caseSensitive: Boolean): Longint;
const
  BufferSize = $8001;  { 32K+1 bytes }
var
  pBuf, pEnd, pScan, pPos: PChar;
  filesize: LongInt;
  bytesRemaining: LongInt;
  bytesToRead: Integer;
  F: file;
  SearchFor: PChar;
  oldMode: Word;
begin
  { assume failure }
  Result := -1;
  if (Length(forString) = 0) or (Length(FileName) = 0) then Exit;
  SearchFor := nil;
  pBuf	  := nil;
  { open file as binary, 1 byte recordsize }
  AssignFile(F, FileName);
  oldMode  := FileMode;
  FileMode := 0;	{ read-only access }
  Reset(F, 1);
  FileMode := oldMode;
  try { allocate memory for buffer and pchar search string }
	SearchFor := StrAlloc(Length(forString) + 1);
	StrPCopy(SearchFor, forString);
	if not caseSensitive then  { convert to upper case }
	  AnsiUpper(SearchFor);
	GetMem(pBuf, BufferSize);
	filesize	   := System.Filesize(F);
	bytesRemaining := filesize;
	pPos		   := nil;
	while bytesRemaining > 0 do
	begin
	  { calc how many bytes to read this round }
	  if bytesRemaining >= BufferSize then
		bytesToRead := Pred(BufferSize)
	  else
		bytesToRead := bytesRemaining;
	  { read a buffer full and zero-terminate the buffer }
	  BlockRead(F, pBuf^, bytesToRead, bytesToRead);
	  pEnd  := @pBuf[bytesToRead];
	  pEnd^ := #0;
	  pScan := pBuf;
	  while pScan < pEnd do
	  begin
		if not caseSensitive then { convert to upper case }
		  AnsiUpper(pScan);
		pPos := StrPos(pScan, SearchFor);  { search for substring }
		if pPos <> nil then
		begin { Found it! }
		  Result := FileSize - bytesRemaining +
			Longint(pPos) - Longint(pBuf);
		  Break;
		end;
		pScan := StrEnd(pScan);
		Inc(pScan);
	  end;
	  if pPos <> nil then Break;
	  bytesRemaining := bytesRemaining - bytesToRead;
	  if bytesRemaining > 0 then
	  begin
		Seek(F, FilePos(F) - Length(forString));
		bytesRemaining := bytesRemaining + Length(forString);
	  end;
	end; { While }
  finally
	CloseFile(F);
	if SearchFor <> nil then StrDispose(SearchFor);
	if pBuf <> nil then FreeMem(pBuf, BufferSize);
  end;
end; { ScanFile }


// Search in autoexec.bat for "keyb" with case insensitive
// In der autoexec.bat nach "keyb" suchen

procedure TForm1.Button1Click(Sender: TObject);
var
  Position: integer;
begin
  Position := ScanFile('c:\autoexec.bat', 'keyb', False);
  ShowMessage(IntToStr(Position));
end;

بالنسبة لموضوع القاموس لا أظن أن هذه الطريقة مجدية ربما إذا إستخدمت قواعد البيانات أفضل

أو حاول إستخدام TStringList فهي أسهل للبحث والتحميل من ملف ولكن

أيضا أنت تقول أن تأخذ كلمة من عمود ونظيرتها من أخر طيب ماذا لو كان للكلمة أكثر من معنى هل تأخذ عمودين أو ثلاث

البحث سوف يكون أطول وأكثر تعرضا للخطأ

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