سؤال

لدي ملف نصي كبير جدًا ، ويحتاج برنامج iPad الخاص بي إلى استبدال سطر واحد من البيانات أحيانًا (NewLine: ' n'). كيف يمكنني القيام بذلك بكفاءة؟ كتابة الملف بأكمله في وقت واحد ليس خيارًا.

لقد كنت أبحث في nsfilehandle ، ويبدو أنه سيفعل ما أريد ؛ في الوقت الحالي ، أواجه مشكلة في معرفة كيفية العثور على السطر X ، ثم استبدله بالبيانات من سلسلة. أعتقد بعد ذلك ، كل ما أحتاج إلى فعله هو Call SynchronizeFile ، أليس كذلك؟

انا اقدر مساعدتك!

هل كانت مفيدة؟

المحلول

لا يمكنك فعل ذلك حقًا دون كتابة الملف بأكمله. يمكنك البحث عن بداية الخط ثم كتابة الخط الجديد. ولكن عليك أولاً معرفة إزاحة هذا الخط. إذا لم يكن لديك بالفعل هذا يعني قراءة الملف من البداية إلى هذا السطر. ثم يمكنك كتابة السطر الجديد ، ولكن فقط إذا كان نفس طول الخط الأصلي تمامًا. إذا كان لفترة أطول ، فسيقوم بالكتابة فوق السطر التالي - لا توجد طريقة لإدراج البيانات في ملف. إذا كان الخط الجديد أقصر من الخط القديم ، فستبقى نهاية الخط القديم. نفس متطلبات الطول صعبة أيضا. هذا يعني نفس الطول في البايتات. اعتمادًا على الحرف الذي يشفر بعض الأحرف قد يتطلب بايت أكثر من غيرها.

إذا كنت بحاجة حقًا إلى القيام بذلك وجعلها تعمل مقابل كل حالة يجب عليك استخدام هذه الخطوات:

  1. اقرأ الملف بأكمله لمعرفة إزاحة الخط الذي تهتم به
  2. تسعى إلى إزاحة الخط
  3. اكتب الخط الجديد
  4. اكتب بقية الملف الذي تقرأه في الخطوة 1.

ستعمل هذه الخوارزمية ، بغض النظر عن المدة أو القصور الخطوط أو كيفية ترميزها. ولكن من المحتمل أن يكون هذا أغلى من مجرد كتابة الملف بأكمله ، خاصة إذا كان لديك في الذاكرة على أي حال.

هل قمت بالفعل بالتحقق من أنه من غير المقبول كتابة الملف بأكمله أم أنك تقوم بالتحسين المبكر هنا؟ إذا كان الملف النصي الخاص بك كبيرًا حقًا ، فيجب أن تفكر في قاعدة بيانات ، مثل SQLite ، أو لاستخدام البيانات الأساسية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top