Mission Carthage

الرئيسية › الدروس › الملفات (Fichiers)

ملفات النص وملفات المعطيات بـ Algo وPython (pickle)

الفصل 23 · 3 علوم الإعلامية, باك علوم الإعلامية

خلّي المعطيات بعد ما يوفى البرنامج: ملفات نص سطر بسطر، ملفات معطيات فيها enregistrements، وفرز ملف.

دروس هذا الفصل

  1. ملف النص
  2. معالجة ملف نص
  3. ملف المعطيات
  4. فرز ملف

الدرس 23.1 : ملف النص

11 دقيقة

المتغيّرات تمشي كي البرنامج يوقف. الـ fichier يخلّي المعطيات على الـ disque. ملف النص فيه أسطر حروف، كيما وثيقة الـ bloc-notes.

في Python

انتبه : Python ما عندوش Fin_fichier: نقراو ما دام السطر موش فارغ. إذن تجنّب الأسطر الفارغة في وسط الفيشي.

نصيحة : هوني، الفيشيات يتصنعو في dossier وحدو متاع البرنامج متاعك: يتفرّغ في كل تمرين.

بـ Python

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

f = open("villes.txt", "w")
f.write("Tunis" + "\n")
f.write("Sfax" + "\n")
f.write("Tozeur" + "\n")
f.close()
f = open("villes.txt", "r")
n = 0
ch = f.readline().rstrip("\n")
while ch != "":
    n = n + 1
    print(n, ch)
    ch = f.readline().rstrip("\n")
f.close()

بـ algorithme

في الـ algorithme، الـ boucle توقف بـ Fin_fichier(F).

Algorithme Villes
Début
  Ouvrir("villes.txt", F, "w")
  Ecrire_nl(F, "Tunis")
  Ecrire_nl(F, "Sfax")
  Ecrire_nl(F, "Tozeur")
  Fermer(F)
  Ouvrir("villes.txt", F, "r")
  n ← 0
  Tant que Non Fin_fichier(F) Faire
    Lire_ligne(F, ch)
    n ← n + 1
    Ecrire(n, " ", ch)
  FinTantQue
  Fermer(F)
Fin

TDO
Objet | Type/Nature
F | Fichier texte
n | Entier
ch | Chaîne

الدرس 23.2 : معالجة ملف نص

11 دقيقة

ياسر مرّات نقراو فيشي معمّر من قبل باش نطلّعو منو معلومة: نعدّو الأسطر، نحسبو معدّل، نلوّجو على كلمة، ولا ننسخو جزء من الأسطر في فيشي آخر.

نصيحة : في تمارين الدرس هذا، الفيشي الأوّل موجود من قبل في dossier البرنامج.

بـ Python

الفيشي temperatures.txt فيه حرارة في كل سطر. نحسبو المعدّل.

f = open("temperatures.txt", "r")
s = 0
n = 0
ch = f.readline().rstrip("\n")
while ch != "":
    s = s + int(ch)
    n = n + 1
    ch = f.readline().rstrip("\n")
f.close()
print("Moyenne :", s / n)

بـ algorithme

Valeur(ch) تحوّل السطر لعدد.

Algorithme Moyenne
Début
  Ouvrir("temperatures.txt", F, "r")
  s ← 0
  n ← 0
  Tant que Non Fin_fichier(F) Faire
    Lire_ligne(F, ch)
    s ← s + Valeur(ch)
    n ← n + 1
  FinTantQue
  Fermer(F)
  Ecrire("Moyenne : ", s / n)
Fin

TDO
Objet | Type/Nature
F | Fichier texte
s, n | Entier
ch | Chaîne

الدرس 23.3 : ملف المعطيات

12 دقيقة

ملف المعطيات (ولا fichier typé) يحطّ قيم من نفس النوع: أعداد صحيحة، ولا enregistrements كاملين (تلميذ كامل في كل مرّة). نفتحوه بالـ mode binaire: "wb"، "rb"، "ab".

انتبه : Python ما عندوش Fin_fichier للفيشيات هذي: load تطلّع الغلطة EOFError في الآخر. إذن نقراو داخل try، و except EOFError يوقّف الـ boucle.

بـ Python

نسجّلو ثلاثة تلاميذ، وبعد نعاودو نقراو الفيشي باش نكتبو الناجحين.

from pickle import dump, load

f = open("classe.dat", "wb")
for i in range(3):
    e = {"nom": "", "moy": 0.0}
    e["nom"] = input()
    e["moy"] = float(input())
    dump(e, f)
f.close()
f = open("classe.dat", "rb")
arret = False
while not arret:
    try:
        e = load(f)
        if e["moy"] >= 10:
            print(e["nom"], e["moy"])
    except EOFError:
        arret = True
f.close()

بـ algorithme

في الـ algorithme، Fin_fichier(F) توقّف القراءة.

Algorithme Admis
Début
  Ouvrir("classe.dat", F, "wb")
  Pour i de 1 à 3 Faire
    Lire(e.nom)
    Lire(e.moy)
    Ecrire(F, e)
  FinPour
  Fermer(F)
  Ouvrir("classe.dat", F, "rb")
  Tant que Non Fin_fichier(F) Faire
    Lire(F, e)
    Si e.moy ≥ 10 Alors
      Ecrire(e.nom, " ", e.moy)
    FinSi
  FinTantQue
  Fermer(F)
Fin

TDNT
Eleve = Enregistrement
  nom : Chaîne
  moy : Réel
Fin
FEleves = Fichier d'Eleve

TDO
Objet | Type/Nature
F | FEleves
e | Eleve
i | Entier

الدرس 23.4 : فرز ملف

11 دقيقة

ما نفرزوش مباشرة في الفيشي. نخدمو على ثلاثة مراحل، في الذاكرة المركزية:

نصيحة : نفس الطريقة تخدم باش ندخّلو ولا ننحّيو عنصر في وسط الفيشي: نبدّلوه في الـ tableau، وبعد نعاودو نكتبو الفيشي الكل.

بـ Python

الفيشي ages.txt يتنقل لـ liste، يتفرز بالـ sélection، وبعد يتعاود يتكتب.

f = open("ages.txt", "r")
t = [0] * 50
n = 0
ch = f.readline().rstrip("\n")
while ch != "":
    t[n] = int(ch)
    n = n + 1
    ch = f.readline().rstrip("\n")
f.close()
for i in range(n - 1):
    pmin = i
    for j in range(i + 1, n):
        if t[j] < t[pmin]:
            pmin = j
    aux = t[i]
    t[i] = t[pmin]
    t[pmin] = aux
f = open("ages.txt", "w")
for i in range(n):
    f.write(str(t[i]) + "\n")
f.close()
f = open("ages.txt", "r")
ch = f.readline().rstrip("\n")
while ch != "":
    print(ch)
    ch = f.readline().rstrip("\n")
f.close()

بـ algorithme

الثلاثة مراحل: النقل، الفرز، وإعادة الكتيبة.

Algorithme TrierFichier
Début
  Ouvrir("ages.txt", F, "r")
  n ← 0
  Tant que Non Fin_fichier(F) Faire
    Lire_ligne(F, ch)
    n ← n + 1
    T[n] ← Valeur(ch)
  FinTantQue
  Fermer(F)
  Pour i de 1 à n - 1 Faire
    pmin ← i
    Pour j de i + 1 à n Faire
      Si T[j] < T[pmin] Alors
        pmin ← j
      FinSi
    FinPour
    aux ← T[i]
    T[i] ← T[pmin]
    T[pmin] ← aux
  FinPour
  Ouvrir("ages.txt", F, "w")
  Pour i de 1 à n Faire
    Ecrire_nl(F, convch(T[i]))
  FinPour
  Fermer(F)
  Ouvrir("ages.txt", F, "r")
  Tant que Non Fin_fichier(F) Faire
    Lire_ligne(F, ch)
    Ecrire(ch)
  FinTantQue
  Fermer(F)
Fin

TDO
Objet | Type/Nature
F | Fichier texte
T | Tableau de 50 Entiers
n, i, j, pmin, aux | Entier
ch | Chaîne

تدرّب مجانًا

كل درس فيه 3 تمارين مجانية مع تلميحات باش تطبّق الفصل هذا مع هنّيبوت.

افتح الفصل في Mission Carthage جرّب في الكومبيلاتور أونلاين

← الفصل اللي قبل : الخوارزميات التراجعية · الفصل اللي بعد : فرز Shell، الفرز بالعدّ، والدمج →

كل الفصول · شوف فروض 2 تكنولوجيا المصلّحة

الدروس كتبناها لـ Mission Carthage على أساس البرنامج الرسمي. الأستاذ متاعك يبقى المرجع.