<commit_before># -*- coding: utf-8 -*-
import re
import sys




def filtrer (source, destination) :
	"""
	fonction de traitement
	Lit et traite ligne par ligne au fur et à mesure dans le
	fichier de destination
	"""
	liste = []
	check = 0
	findeligne = source.readline().rstrip('\n\r')

		#parcours = re.match(r"\sSPECIAL EVENTS", ligne)
		#ects = re.match(r"((\s)+('|\")ects('|\")(\s)+:(\s)+3,)", ligne)
		#[^(Holidays)][^(Press)][^(Conf)] sauf vacances press et conf pour acronym héhéhé [^\"Press\"|Holidays|Conf]
		#parcours = re.search(r"((\s)+('|\")students('|\")(\s)*:(\s)+('|\")((?P<UE>[A-Z](\+\+)?[A-Z]+)\[(?P<Statut>\w+)\](,)?)+('|\"),)", ligne)
		#parcours = re.search(r"((\s)+('|\")students('|\")(\s)*:(\s)+('|\")((?P<P1>[A-Z](\+\+)?[A-Z]+)\[(?P<Statut1>\w+)\](,)?)((?P<P2>[A-Z](\+\+)?[A-Z]+)\[(?P<Statut2>\w+)\](,)?)((?P<P3>[A-Z](\+\+)?[A-Z]+)\[(?P<Statut3>\w+)\](,)?)((?P<P4>[A-Z](\+\+)?[A-Z]+)\[(?P<Statut4>\w+)\](,)?)('|\"),)", ligne)
		#UE = re.match(r"((\s)+('|\")acronym('|\")(\s)*:(\s)*('|\")(?P<UE>\w+(&)?\w+)('|\"),)", ligne)
			#semestre = re.match(r"((\s)+('|\")semester('|\")(\s)*:(\s)*(?P<semestre>(\d)+),(\s)*(//)*(.,=\w\s)*)", ligne)

	for ligne in source : 
		UE = re.match(r"((\s)+('|\")acronym('|\")(\s)*:(\s)*('|\")(?P<UE>\w+(&)?\w+)('|\"),)", ligne)
		parcours = re.search(r"((\s)+('|\")students('|\")(\s)*:(\s)+('|\")((?P<P1>[A-Z](\+\+)?[A-Z]+)\[(?P<Statut1>\w+)\](,)?)((?P<P2>[A-Z](\+\+)?[A-Z]+)\[(?P<Statut2>\w+)\](,)?)((?P<P3>[A-Z](\+\+)?[A-Z]+)\[(?P<Statut3>\w+)\](,)?)((?P<P4>[A-Z](\+\+)?[A-Z]+)\[(?P<Statut4>\w+)\](,)?)('|\"),)", ligne)
		semestre = re.match(r"((\s)+('|\")semester('|\")(\s)*:(\s)*(?P<semestre>(\d)+),(\s)*(//)*(.,=\w\s)*)", ligne)
		if UE is not None : 
			les_ue = UE.group('UE')
			#print les_ue
			if (les_ue is not " Holidays " or les_ue != " Conf ") :
				liste_ue = []
				liste.append(liste_ue)
				liste_ue.append(les_ue)

		if semestre is not None : 
			liste_ue.append(semestre.group('semestre'))
			
		if parcours is not None : 
			liste_ue.append(parcours.group('P1'))
			liste_ue.append(parcours.group('Statut1'))
			liste_ue.append(parcours.group('P2'))
			liste_ue.append(parcours.group('Statut2'))
			liste_ue.append(parcours.group('P3'))
			liste_ue.append(parcours.group('Statut3'))
			liste_ue.append(parcours.group('P4'))
			liste_ue.append(parcours.group('Statut4'))
	liste.pop(0)
	liste.pop(1)
	liste.pop(2)
	liste.pop(0)
	#print liste
	liste_triee = []
	liste_par = ["C++BIO", "GENORG", "ORGECO", "BSC"]
	for parcours in liste_par :
		rangement (parcours, liste, liste_triee)
	#print liste_triee

	"""
		
	#print liste_triee
	#liste_triee = [["C++BIO", [[["11", "12"], ["13", "14"]],[["21", "22"],["23", "24"]]]], ["Parcours2", [[["211", "212"], ["213", "214"]],[["221", "222"], ["223", "224"]]]]]
	"""

	#écriture du premier objet du json	
	destination.write ("[{\"name\" : \"Master\", \n \"children\" : [\n") 
	#parcours chaque liste de la liste de données, cad chaque parcours
	for i in liste_triee :
		#puis chaque élément de la liste du parcours
		for j in i :
			if j != i[0] :
				#si l'élément correspond, le nom du parcours est inséré
				destination.write("    {\"name\" : \"")
				destination.write (i[0])
				destination.write("\",\n     \"parent\" : \"Master\", \n     \"children\" : [\n")
				#création de la variable qui va définir le numéro du semestre
				w = 7
				#pour chaque liste de semestre, ecrire le nom du semestre et l'objet des ues obligatoires
				for k in (j) :					
					destination.write("         {\"name\" : \"")
					destination.write("semestre ")
					destination.write(str(w))
					destination.write("\",\n           \"parent\" : \"")
					destination.write(i[0])
					destination.write("\", \n          \"children\" : [\n\n")
					destination.write ("              {\"name\" : \"UEs Obligatoires\",\n               \"parent\" : \"")
					destination.write ("semestre ")
					destination.write (str(w))
					destination.write("\", \n               \"children\" : [\n\n")
					#pour chaque liste des ues, créer les objets
					for l in k :
						#k[0] ==> les ues obligatoires, toujours rangés en première position
						if l == k[0] :
							#création des objets ues
							for n in l :
								destination.write ("                   {\"name\" : \"")
								destination.write((str(n)))
								destination.write("\",\n                   \"parent\" : \"UEs Obligatoires\",			    	\n},\n")
					#création de l'objet des ues facultatives
					destination.write ("              {\"name\" : \"UEs Facultatives\",\n             \"parent\" : \"")
					destination.write("semestre ")
					destination.write(str(w))
					destination.write("\", \n             \"children\" : [\n\n")
					#pour chaque liste des ues, créer les objets
					for l in k :
						#k[1] ==> les ues facultatives, rangés en seconde position
						if l == k[1] :
							#création des objets ues
							for n in l :
								destination.write ("                    {\"name\" : \"")
								destination.write((str(n)))
								destination.write("\",\n                    \"parent\" : \"UEs Facultatives\", 			    	\n},\n")
					#incrémentation de la variable qui numérote les semestres
					w = w +1
	#fermeture de tous les objets
	destination.write(" }\n      ]\n      }\n      ] \n      }\n      ]\n      },\n")

def rangement (a, liste_source, liste_destination):
	liste_p =[]
	listesemestres = []
	num_s = ["7", "8", "9", "10"]
	for num in num_s :
		lis_s7 = []
		liste_s7_r = []
		liste_s7_e = []
		lis_s8 = []
		liste_s8_r = []
		liste_s8_e = []
		for i in liste_source :
			for j in range(len(i)) :
				if i[j] == a and i[j+1] == "required" and (i[j-1] == num or i[j-3] == num or i[j-5] == num) :
					liste_s7_r.append(i[0])
					#print liste_s7_r
					
				if i[j] == a and i[j+1] == "elective" and (i[j-1] == num or i[j-3] == num or i[j-5] == num):
					liste_s7_e.append(i[0])

		lis_s7.append(liste_s7_r)
		lis_s7.append(liste_s7_e)

		listesemestres.append(lis_s7)

	liste_p.append(a)
	liste_p.append(listesemestres)
	liste_destination.append(liste_p)
	return liste_destination





#ouverture du fichier source<commit_msg>Nettoyage du code de la moulinette<commit_after># -*- coding: utf-8 -*-
import re
import sys




def filtrer (source, destination) :

	"""
	Première partie : trouver ce qui nous interesse dans le code qui nous est donné
	"""

	liste = []
	#Supression des caractères invisbles en fin de ligne
	findeligne = source.readline().rstrip('\n\r')
	#Pour chaque ligne du fichier
	#rechercher la regexp
	for ligne in source : 
		UE = re.match(r"((\s)+('|\")acronym('|\")(\s)*:(\s)*('|\")(?P<UE>\w+(&)?\w+)('|\"),)", ligne)
		parcours = re.search(r"((\s)+('|\")students('|\")(\s)*:(\s)+('|\")((?P<P1>[A-Z](\+\+)?[A-Z]+)\[(?P<Statut1>\w+)\](,)?)((?P<P2>[A-Z](\+\+)?[A-Z]+)\[(?P<Statut2>\w+)\](,)?)((?P<P3>[A-Z](\+\+)?[A-Z]+)\[(?P<Statut3>\w+)\](,)?)((?P<P4>[A-Z](\+\+)?[A-Z]+)\[(?P<Statut4>\w+)\](,)?)('|\"),)", ligne)
		semestre = re.match(r"((\s)+('|\")semester('|\")(\s)*:(\s)*(?P<semestre>(\d)+),(\s)*(//)*(.,=\w\s)*)", ligne)
		if UE is not None : 
			#si la regexp renvoie quelque chose
			#ajouter ce quelque chose dans une liste
			les_ue = UE.group('UE')
			if (les_ue is not " Holidays " or les_ue != " Conf ") :
				liste_ue = []
				liste.append(liste_ue)
				liste_ue.append(les_ue)

		if semestre is not None : 
			liste_ue.append(semestre.group('semestre'))
			
		if parcours is not None : 
			liste_ue.append(parcours.group('P1'))
			liste_ue.append(parcours.group('Statut1'))
			liste_ue.append(parcours.group('P2'))
			liste_ue.append(parcours.group('Statut2'))
			liste_ue.append(parcours.group('P3'))
			liste_ue.append(parcours.group('Statut3'))
			liste_ue.append(parcours.group('P4'))
			liste_ue.append(parcours.group('Statut4'))
	liste.pop(0)
	liste.pop(1)
	liste.pop(2)
	liste.pop(0)
	#Suppression des premiers éléments de la liste qui n'ont rien a voir avec les parcours

	"""
	Seconde partie : ranger les données de la manière que l'on souhaite
	"""

	liste_triee = []
	liste_par = ["C++BIO", "GENORG", "ORGECO", "BSC"]
	#Si un nouveau parcours est crée, il suffit de rajouter son nom à la fin de cette liste
	#pour automatiser la mise à jour du json
	for parcours in liste_par :
		rangement (parcours, liste, liste_triee)

	"""
	Troisième partie : écriture du fichier json
	"""

	#écriture du premier objet du json	
	destination.write ("[{\"name\" : \"Master\", \n \"children\" : [\n") 
	#parcours chaque liste de la liste de données, cad chaque parcours
	for i in liste_triee :
		#puis chaque élément de la liste du parcours
		for j in i :
			if j != i[0] :
				#si l'élément correspond, le nom du parcours est inséré
				destination.write("    {\"name\" : \"")
				destination.write (i[0])
				destination.write("\",\n     \"parent\" : \"Master\", \n     \"children\" : [\n")
				#création de la variable qui va définir le numéro du semestre
				w = 7
				#pour chaque liste de semestre, ecrire le nom du semestre et l'objet des ues obligatoires
				for k in (j) :					
					destination.write("         {\"name\" : \"")
					destination.write("semestre ")
					destination.write(str(w))
					destination.write("\",\n           \"parent\" : \"")
					destination.write(i[0])
					destination.write("\", \n          \"children\" : [\n\n")
					destination.write ("              {\"name\" : \"UEs Obligatoires\",\n               \"parent\" : \"")
					destination.write ("semestre ")
					destination.write (str(w))
					destination.write("\", \n               \"children\" : [\n\n")
					#pour chaque liste des ues, créer les objets
					for l in k :
						#k[0] ==> les ues obligatoires, toujours rangés en première position
						if l == k[0] :
							#création des objets ues
							for n in l :
								destination.write ("                   {\"name\" : \"")
								destination.write((str(n)))
								destination.write("\",\n                   \"parent\" : \"UEs Obligatoires\",			    	\n},\n")
					#création de l'objet des ues facultatives
					destination.write ("              {\"name\" : \"UEs Facultatives\",\n             \"parent\" : \"")
					destination.write("semestre ")
					destination.write(str(w))
					destination.write("\", \n             \"children\" : [\n\n")
					#pour chaque liste des ues, créer les objets
					for l in k :
						#k[1] ==> les ues facultatives, rangés en seconde position
						if l == k[1] :
							#création des objets ues
							for n in l :
								destination.write ("                    {\"name\" : \"")
								destination.write((str(n)))
								destination.write("\",\n                    \"parent\" : \"UEs Facultatives\", 			    	\n},\n")
					#incrémentation de la variable qui numérote les semestres
					w = w +1
	#fermeture de tous les objets
	destination.write(" }\n      ]\n      }\n      ] \n      }\n      ]\n      },\n")

def rangement (parcours, liste_source, liste_destination):
	liste_p =[]
	listesemestres = []
	num_s = ["7", "8", "9", "10"]

	for num in num_s :
		liste_r_e = []
		liste_r = []
		liste_e = []

		for i in liste_source :

			for j in range(len(i)) :
				
				if i[j] == parcours and i[j+1] == "required" and (i[j-1] == num or i[j-3] == num or i[j-5] == num) :
					liste_r.append(i[0])

					
				if i[j] == parcours and i[j+1] == "elective" and (i[j-1] == num or i[j-3] == num or i[j-5] == num):
					liste_e.append(i[0])

		liste_r_e.append(liste_r)
		liste_r_e.append(liste_e)
		listesemestres.append(liste_r_e)

	liste_p.append(parcours)
	liste_p.append(listesemestres)
	liste_destination.append(liste_p)
	return liste_destination





#ouverture du fichier source
{'fraction_non_alphanumeric': 0.2273237248640718, 'fraction_numerical': 0.013377060498834902, 'mean_word_length': 2.7745928338762216, 'pattern_counts': {'":': 0, '<': 35, '<?xml version=': 0, '>': 39, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6243024', 'n_tokens_mistral': 5312, 'n_tokens_neox': 4638, 'n_words': 964}