ما هو الفرق بين هذه المكالمات الثلاثة FSCANF في Ocaml؟
سؤال
كتبت قليلا من الكود إلى مجرد تخطي num_lines
خطوط في ملف الإدخال (طباعة الخطوط خارج لأغراض التصحيح. هنا شيئين حاولت ذلك لم ينجح:
for i = 0 to num_lines do
print_endline (fscanf infile "%s" (fun p -> p));
done;;
for i = 0 to num_lines do
print_endline (fscanf infile "%S\n" (fun p -> p));
done;;
ولكن هذا واحد يعمل:
for i = 0 to num_lines do
print_endline (fscanf infile "%s\n" (fun p -> p));
done;;
لقد كنت أحاول فهم الوثائق بشأن FSCAMANF، لكن لا يبدو أنه غرق. هل يمكن لشخص ما أن يفسر لي بالضبط لماذا عملت آخر مقتلا، ولكن الاثنان الأولان
المحلول
"٪ S" - يطابق كل شيء للمساحة البيضاء التالية (" n" هنا) ولكن لا تتطابق أبدا " n"
"٪ S N" - يطابق الشيء الذي يشبه سلاسل OCAML، ثم " n"
"٪ s n" - يطابق كل شيء للمساحة البيضاء التالية (" n" هنا) ثم " n". سيتصرف هذا مختلفا إذا لم يكن هناك " n" في ملف أو إذا كان هناك مساحة قبل " n"، إلخ.
"٪ S" - يطابق أي شيء حتى المساحة البيضاء، ثم جميع المساحات البيضاء الزائدة بما في ذلك " n" (أو ربما حتى مساحة بيضاء). يعمل هذا لأن "" يعني "أي مساحة بيضاء، لا شيء ممكن"، في سلسلة التنسيق.