#! /usr/bin/env python

def remplirFichierText (nomFich) : 
	f = open(nomFich, 'w')
	for i in range(1, 11) : 
		for j in range(1, 11) :
			ch = str(i) + ' fois ' + str(j) + ' egal ' + str(i*j) + '\n'
			f.write (ch)
	f.close() 

def lireFichierTextParReadline(nomFich) : 
	print('\n\ncontenu du fichier TextParReadline\n')
	f = open(nomFich, 'r')
	ligne = f.readline()
	while ligne != '' : 
		print(ligne)
		ligne = f.readline()
	f.close() 

def lireFichierTextParReadlines(nomFich) : 
	print('\n\ncontenu du fichier TextParReadlines\n')
	f = open(nomFich, 'r')
	toutesLeslignes = f.readlines()
	print(toutesLeslignes)
	f.close() 

nomFichier = 'fichier_table1'
remplirFichierText(nomFichier)
lireFichierTextParReadline(nomFichier)
lireFichierTextParReadlines(nomFichier)

import pickle

def remplirFichierBinairePickle(nomFich) : 
	f = open(nomFich, 'wb')
	for i in range(1, 11) : 
		for j in range(1, 11) :
			#pickle.dump(i, f)
			#pickle.dump(j, f)
			#pickle.dump(i*j, f)
			pickle.dump([i, j, i*j], f)
	f.close() 

def lireFichierBinaireParPickle(nomFich) : 
	print('\n\ncontenu du fichier BinaireParPickle\n')
	f = open(nomFich,"rb")
	try :
		while True :
			#op1 = pickle.load(f)
			#op2 = pickle.load(f)
			#resultat = pickle.load(f)
			#print (str(op1) + ' fois ' + str(op2) + ' egal ' + str(resultat) + '\n')
			liste = pickle.load(f)
			print (str(liste[0]) + ' fois ' + str(liste[1]) + ' egal ' + str(liste[2]) + '\n')
	except EOFError : # Si on atteind la fin du fichier, une erreur est levée, et on la récupère
		print('Fin du fichier') 
	f.close()

nomFichier = 'fichier_table2'
remplirFichierBinairePickle(nomFichier)
lireFichierBinaireParPickle(nomFichier)


import struct, sys

def remplirFichierBinaireStruct(nomFich) : 
	f = open(nomFich, 'wb')
	for i in range(1, 11) : 
		for j in range(1, 11) :
			donnee = struct.pack('iii', i, j, i*j)
			f.write(donnee)
	f.close() 

def lireFichierBinaireParStruct(nomFich) : 
	print('\n\ncontenu du fichier BinaireParStruct\n')
	f = open(nomFich,"rb")
	tailleDonnee = struct.calcsize('iii')
	f.seek(0,2)
	tailleFichier = f.tell()
	f.seek(0)
	while f.tell() < tailleFichier : # f.tell() donne la position actuelle du pointeur de lecture/écriture dans le fichier
			donneeCommeBytes = f.read(tailleDonnee)
			donneeTypee = struct.unpack('iii',donneeCommeBytes)	
			print (str(donneeTypee[0]) + ' fois ' + str(donneeTypee[1]) + ' egal ' + str(donneeTypee[2]) + '\n')
	f.close()

nomFichier = 'fichier_table3'
remplirFichierBinaireStruct(nomFichier)
lireFichierBinaireParStruct(nomFichier)

# à voir : https://www.tutorialspoint.com/python/python_files_io.htm