ulvis.paste.net

Paste Search Dynamic
Recent pastes
qui ne fonctionne pas car il m
  1. import os
  2. import tkinter
  3. from tkinter import filedialog
  4. #from tkinter import messagebox
  5. import re, itertools, copy, io, shutil, fileinput
  6.  
  7.  
  8.  
  9. def main():
  10.     filepath = "test_test.dsc"
  11.     usource = "usource.txt"
  12.     errorpath = "errors.txt"
  13.     yes = {'y', 'yes', 'oui', 'o', 'Y', 'YES', 'OUI', 'O'}
  14.     no = {'n', 'no', 'non', 'N', 'NO', 'NON'}
  15.     check = os.path.isfile(filepath)
  16.     if check is true:
  17.         ans = str(input("Le fichier existe déjà. Voulez-vous l'écraser pour en créer un autre part dessus ? (Y/N)"))
  18.         if ans in yes:
  19.             q_scan(filepath, usource, errorpath)
  20.         elif ans in no:
  21.             quit()
  22.         else:
  23.             print('Réponse éronnée, veuillez reéesayer.')
  24.             main()
  25.     else:
  26.         q_scan(filepath, usource, errorpath)
  27.  
  28.  
  29. def q_scan(filepath, usource, errorpath):
  30.     l_index = 0
  31.     global q_array, q_index, ans_list
  32.     q_array, q_index, ans_list = [], [], []
  33.     #question_pattern = re.compile("^[a-zA-Z][0-9a-zA-Z]+\s*:.+$")
  34.     question_pattern = re.compile("^[a-zA-Z][0-9a-zA-Z]+$")
  35.     root = tkinter
  36.     root.og = filedialog.askopenfilename(initialdir="/", title="Select file", filetypes=(
  37.         ("Text files", "*.txt"), ("DSC files", "*.dsc"), ("all files", "*.*")))
  38.     global og_path
  39.     og_path = root.og
  40.     if og_path == '':
  41.         print("fichier introuvable: adresse vide ou invalide, veuillez recommencer")
  42.         q_scan(filepath, usource, errorpath)
  43.  
  44.     #global source
  45.     global source, source_data, error_file
  46.     with io.open(og_path, 'r', encoding='utf8') as source:
  47.         try:
  48.             with io.open(usource, mode='w+', encoding='utf-8') as source_data:
  49.                 source_data.writelines(source.name + '\n' + '\n')
  50.                 shutil.copyfileobj(source, source_data)
  51.                 source_data.close()
  52.         except unicodedecodeerror:
  53.             source.close()
  54.             with io.open(og_path, mode='r') as source:
  55.                 with io.open(usource, mode='w+', encoding='utf-8') as source_data:
  56.                     source_data.writelines(source.name + '\n' + '\n')
  57.                     shutil.copyfileobj(source, source_data)
  58.                     source_data.close()
  59.  
  60.     with io.open(usource, mode='r+', encoding='utf-8') as source_data:
  61.         print(str(source.name))
  62.         global data
  63.         with io.open(filepath, mode="w+", encoding='utf-8') as data, io.open(
  64.                 errorpath, mode="w+", encoding='utf-8') as error_file:
  65.             #sd = source_data.read()
  66.             for line in source_data:
  67.                 tmp = line.partition(' ')[0]
  68.                 check_tmp = question_pattern.match(tmp)
  69.                 q_layout = str(tmp) + " : "
  70.                 if check_tmp is not none and tmp.isalnum() is true and q_layout in line:
  71.                     print(str(tmp))
  72.                     q_array = q_array + [q_layout]
  73.                     q_index = q_index + [l_index + 1]
  74.                 l_index += 1
  75.             l_index = 0
  76.             data.writelines("DEFINITIONS" + '\n' + '\n')
  77.             find_defs()
  78.             source_data.seek(0)
  79.             q_array = []
  80.             q_index = []
  81.             for line in source_data:
  82.                 tmp = line.partition(' ')[0]
  83.                 check_tmp = question_pattern.match(tmp)
  84.                 q_layout = str(tmp) + " : "
  85.                 if check_tmp is not none and tmp.isalnum() is true and q_layout in line:
  86.                     print(str(tmp))
  87.                     q_array = q_array + [q_layout]
  88.                     q_index = q_index + [l_index + 1]
  89.                 l_index += 1
  90.             data.writelines("QUESTIONS" + '\n' + '\n')
  91.             data.writelines(
  92.                 "fincontact non étudiée, ie il faudra peut être bouger cette partie dans une des sous méthodes" +
  93.             '\n' + '\n')
  94.             data.writelines('html5 "navigateur récent / ancien" : {' + '\n')
  95.             data.writelines('\t' + 'v11 (11) "html5 navigateur récent",' + '\n')
  96.             data.writelines('\t' + 'v12 (12) "html5 sur ipad",' + '\n')
  97.             data.writelines('\t' + 'v13 (13) "html5 sur iphone",' + '\n')
  98.             data.writelines('\t' + 'v14 (14) "html5 sur android",' + '\n')
  99.             data.writelines('\t' + 'v15 (15) "html5 sur windows phone",' + '\n')
  100.             data.writelines('\t' + 'v20 (20) "html4 ancien navigateur"' + '\n')
  101.             data.writelines('\t' + '}' + '\n' + '\n')
  102.             data.writelines('fichier "Provenance des répondants - en fichier" : {' + '\n')
  103.             data.writelines('\t' + 'v0 (0) "test/client",' + '\n')
  104.             data.writelines('\t' + 'v8 (8) "newp2"' + '\n')
  105.             data.writelines('\t' + '}' + '\n' + '\n')
  106.             data.writelines('fichier2 "Provenance des répondants - calculé" : {' + '\n')
  107.             data.writelines('\t' + 'v0 (0) "12345 - test/client",' + '\n')
  108.             data.writelines('\t' + 'v8 (8) "12345 - newp2"' + '\n')
  109.             data.writelines('\t' + '}' + '\n' + '\n')
  110.             data.writelines('complet "Lien de sortie en complet" : {' + '\n')
  111.             data.writelines('\t' + 'v0 (0) "bye",' + '\n')
  112.             data.writelines(
  113.                 '\t' + 'v8 (8) "url=https://ow.cawi.fr/cgi-bin/cawi/Q/_sorties_newpanel/_sorties_newpanel.pl?CW' +
  114.                 '_start=-1&ids=@ANS:id$&etude=newway1469&statut=2&points=10&duree=@ANS:CW_duration$"' + '\n')
  115.             data.writelines('\t' + '}' + '\n' + '\n')
  116.             data.writelines('horscible "Lien de sortie hors cible" : {' + '\n')
  117.             data.writelines('\t' + 'v0 (0) "screenout",' + '\n')
  118.             data.writelines(
  119.                 '\t' + 'v8 (8) "url=https://ow.cawi.fr/cgi-bin/cawi/Q/_sorties_newpanel/_sorties_newpanel.pl?CW_' +
  120.                 'start=-1&ids=@ANS:id$&etude=newway1469&statut=3&points=0&duree=@ANS:CW_duration$"' + '\n')
  121.             data.writelines('\t' + '}' + '\n' + '\n')
  122.             data.writelines('horsquota "Lien de sortie hors quota" : {' + '\n')
  123.             data.writelines('\t' + 'v0 (0) "quotafull",' + '\n')
  124.             data.writelines(
  125.                 '\t' + 'v8 (8) "url=https://ow.cawi.fr/cgi-bin/cawi/Q/_sorties_newpanel/_sorties_newpanel.pl?CW_' +
  126.                 'start=-1&ids=@ANS:id$&etude=newway1469&statut=4&points=0&duree=@ANS:CW_duration$"' + '\n')
  127.             data.writelines('\t' + '}' + '\n' + '\n')
  128.             data.writelines('mode "mode de passation" : {' + '\n')
  129.             data.writelines('\t' + 'v1 (1) "Test dirOP",' + '\n')
  130.             data.writelines('\t' + 'v2 (2) "Test Chargés d' + "'Etude," + '"' + '\n')
  131.             data.writelines('\t' + 'v3 (3) "Test Client",' + '\n')
  132.             data.writelines('\t' + 'v4 (4) "Test aléatoire",' + '\n')
  133.             data.writelines('\t' + 'v5 (5) "Réel"' + '\n')
  134.             data.writelines('\t' + '}' + '\n' + '\n')
  135.             data.writelines('revi "1 - version du questionnaire en cas de modifications inopinées" : {' + '\n')
  136.             data.writelines('\t' + 'v1 (1) "au lancement",' + '\n')
  137.             data.writelines('\t' + 'v2 (2) "[date] : [mdif]"' + '\n')
  138.             data.writelines('\t' + '}' + '\n')
  139.             data.writelines('s3 "ville de résidence" : {' + '\n')
  140.             data.writelines('\t' + 'v9999999 (9999999) "Autre commune"' + '\n')
  141.             data.writelines('\t' + '}' + '\n' + '\n')
  142.  
  143.  
  144.             p_scan()
  145.             data.writelines('CW_firstdate "date de la 1ère connexion" : INTEGER[8]' + '\n')
  146.             data.writelines('CW_firsttime "l\'heure de la 1ère connexion" : INTEGER[6]' + '\n')
  147.             data.writelines('CW_lastdate "la date de la dernière connexion" : INTEGER[8]' + '\n')
  148.             data.writelines('CW_lasttime "l\'heure de la dernière connexion" : INTEGER[6]' + '\n')
  149.             data.writelines('CW_duration "durée du questionnaire" : INTEGER[6]' + '\n')
  150.             data.writelines('CW_track "CW_track" : TEXT[15]' + '\n')
  151.             data.writelines('CW_login "login" : TEXT[15]' + '\n' + '\n' + '\n')
  152.             data.writelines('VARIABLES' + '\n' + '\n')
  153.             #data.seek(0)
  154.             #tt = data.read()
  155.             #if re.search(r'vdef[0-9a-zA-Z]+\n+}', tt) is not None:
  156.             #    re.sub(r'vdef[0-9a-zA-Z]+\n+}', r'vdef[0-9a-zA-Z]+[ ]}', tt)
  157.             #elif re.search(r'idef[0-9a-zA-Z]+\n+}', tt) is not None:
  158.             #    re.sub(r'idef[0-9a-zA-Z]+\n+}', r'vdef[0-9a-zA-Z]+[ ]}', tt)
  159.             #if re.search(r'vdef[0-9a-zA-Z]+\n+,', tt) is not None:
  160.             #    re.sub(r'vdef[0-9a-zA-Z]+\n+,', r'vdef[0-9a-zA-Z]+,', tt)
  161.             #elif re.search(r'idef[0-9a-zA-Z]+\n+,', tt) is not None:
  162.             #    re.sub(r'idef[0-9a-zA-Z]+\n+,', r'vdef[0-9a-zA-Z]+,', tt)
  163.             #data.truncate(0)
  164.             #data.seek(0)
  165.             #data.write(tt)
  166.         data.close()
  167.     source_data.close()
  168.  
  169.  
  170. def find_defs():
  171.     source_data.seek(0)
  172.     answer_dot_pattern = re.compile("^(\d+)\.\s+\(?(\d+|\d*[…]*[ ]*[\u00C0-\u017Fa-zA-Z._^%$#!~@,-]+)\)*.*$")
  173.     answer_par_pattern = re.compile("^(\d+)\)\s+\(?(\d+|\d*[…]*[ ]*[\u00C0-\u017Fa-zA-Z._^%$#!~@,-]+)\)*.*$")
  174.     f1 = source_data.read()
  175.     f2 = source_data.readlines()
  176.     already_chked = {}
  177.     for tkns in q_array:
  178.         source_data.seek(0)
  179.         j = q_array.index(tkns)
  180.         block_line_dot, block_line_par, blp_check, bld_check = "", "", "", ""
  181.         blp_list, bld_list = [], []
  182.         t = len(q_array)
  183.         if j + 1 < len(q_array):
  184.             source_data.seek(0)
  185.             nbr_inblock = 0
  186.             for line in itertools.islice(source_data, int(q_index[j]) - 1, int(q_index[j + 1]) - 1):
  187.  
  188.                 if answer_par_pattern.search(line) is not none:
  189.                     blp_check = blp_check + line
  190.                     blp_list.append(line)
  191.                     ans_int = re.search(r"^\d+(?=\))", line).group()
  192.                     tmp_line = re.sub(ans_int + r'\)(\s*)', "", line)
  193.                     tmp_line = re.sub(r"(\r|\n|\t|\f|\v)+", "", tmp_line)
  194.                     tmp_line = '\t' + "i" + ans_int + " " + "(" + ans_int + ")" + " " + '"' + tmp_line + '" ' + '\n'
  195.                     block_line_par = block_line_par + tmp_line
  196.                     nbr_inblock += 1
  197.                 elif answer_dot_pattern.search(line) is not none:
  198.                     bld_check = bld_check + line
  199.                     bld_list.append(line)
  200.                     #f2.index(line)
  201.                     #print(bld_list)
  202.                     ans_int = re.search(r"^\d+(?=\.)", line).group()
  203.                     tmp_line = re.sub(ans_int + r'\.(\s*)', "", line)
  204.                     tmp_line = re.sub(r"(\r|\n|\t|\f|\v)+", "", tmp_line)
  205.                     tmp_line = '\t' + "v" + ans_int + " " + "(" + ans_int + ")" + " " + '"' + tmp_line + '" ' + '\n'
  206.                     block_line_par = block_line_par + tmp_line
  207.                     nbr_inblock += 1
  208.             last_iter = int(q_index[j]) + nbr_inblock - 1
  209.             source_data.seek(0)
  210.             #cf fichier First : vdef28q2 et question S9 : faire une condition pour check si il n'y a pas
  211.             #apres le found une suite a la reponse du meme type car sinon c'est un mismatch
  212.             #maybe check le nombre de reponse avant de faire le find histoire de avoid le cas present
  213.             #Aussi pour qs5 qs5m qui ne fonctionne pas car il manque le fameux fichier
  214.  
  215.             #if re.search(blp_check, f1) is not None and block_line_par not in already_chked:
  216.             #    m = re.search(blp_check, f1).start()
  217.             #    print('START :  ', m)
  218.  
  219.             # for d in bld_list:
  220.             #    source_data.seek(0)
  221.             #    for n, l in enumerate(source_data, 1):
  222.             #        if d in l:
  223.             #            m =
  224.             #            print('TROUVE LIGNE:  ', n)
  225.             #    print(f2[n])
  226.  
  227.             if block_line_dot not in already_chked or block_line_par not in already_chked:
  228.                 for d in bld_list:
  229.                     source_data.seek(0)
  230.                     for n, l in enumerate(source_data, 1):
  231.                         if d in l:
  232.  
  233.                             print('TROUVE LIGNE:  ', n)
  234.  
  235.  
  236.  
  237.  
  238.  
  239.             if block_line_dot not in already_chked or block_line_par not in already_chked:
  240.                 dot_found = len(re.findall(re.escape(bld_check), f1))
  241.                 par_found = len(re.findall(re.escape(blp_check), f1))
  242.                 if f1.find(bld_check) != 0 and dot_found >= 2:
  243.                     if re.search(r'o::.+', bld_check) is not none:
  244.                         bld_check = re.sub(r'\"o::.+\"', '"Autre, précisez : " + ' +
  245.                                     'othv' + str(nbr_inblock) + ' : TEXT[100] : "size=20,maxlength=100"', bld_check)
  246.                     if re.search(r'x::.+', bld_check) is not none:
  247.                         bld_check = re.sub(r'x::', r'x - ', bld_check)
  248.                     f1 = f1.replace(bld_check, 'idef' + tkns)
  249.                     data.write('idef' + tkns.lower() + '={' + '\n' + block_line_dot + '\t' + '}' + '\n' + '\n')
  250.                     already_chked['idef' + tkns] = block_line_dot
  251.                 elif f1.find(blp_check) != 0 and par_found >= 2:
  252.                     #Si un jour ça te sert..
  253.                     #line_no = f1.index(blp_check)
  254.                     #print('line_no:  ', line_no)
  255.                     if re.search(r'o::.+', blp_check) is not none:
  256.                         blp_check = re.sub(r'o::.+', '"Autre, précisez : " + ' +
  257.                                     'othv' + str(nbr_inblock) + ' : TEXT[100] : "size=20,maxlength=100"', blp_check)
  258.                     if re.search(r'x::.+', blp_check) is not none:
  259.                         blp_check = re.sub(r'x::', r'x - ', blp_check)
  260.                     f1 = f1.replace(blp_check, 'vdef' + tkns.replace(" : ", "") + '\n')
  261.                     data.write('vdef' + tkns.replace(' : ', '').lower() + '={' + '\n' + block_line_par + '\t' + '}' + '\n' + '\n')
  262.                     already_chked['vdef' + tkns] = block_line_par
  263.  
  264.     #print(f1)
  265.     source_data.truncate(0)
  266.     source_data.seek(0)
  267.     source_data.write(f1)
  268.  
  269.  
  270.  
  271. def p_scan():
  272.     global default_dic, dic, iteration, past_line
  273.     past_line = ""
  274.     iteration, q_i = 0, 0
  275.     default_dic = {'question': '', 'answers': [[], []], 'filter': '', 'otxt': '', 'untreated': '', 'end_f': 0,
  276.     'txt': {'id': 0, 'nbr_txt': 1}, 'pgm': {'ri': 0, 'mp': 0, 'rk': 0, 'dp': 0, 'others': 0}, 'cmt': {
  277.             'sdl': '', 'simple': ''}
  278.            }
  279.     dic = copy.deepcopy(default_dic)
  280.     #question = dic['question']
  281.     print("JE SUIS ICI", str(data.name))
  282.     print("LA LISTE DES TOKENS DE QUESTIONS: ", q_array)
  283.     print("LA LISTE DES INDEX: ", q_index)
  284.     source_data.seek(0)
  285.     #global tokens
  286.     for tokens in q_array:
  287.         source_data.seek(0)
  288.         k = q_array.index(tokens)
  289.         count = 1
  290.         #print("Censé etre ", str(q_array[k]), "avec comme index ", str(q_index[k]))
  291.         #data.writelines("Censé etre " + str(q_array[k]) + "avec comme index " + str(q_index[k]) + '\n' + '\n')
  292.         if k + 1 < len(q_array):
  293.             for line in itertools.islice(source_data, int(q_index[k]) - 1, int(q_index[k + 1]) - 1):
  294.                 sub_ans_index = int(q_index[k]) - 1 + count
  295.                 if line.strip() and tokens in line is not none:
  296.                     question = line
  297.                     error_file.writelines(question)
  298.                     question = re.sub(r'\r|\n|\t|\f|\v+$', "", question)
  299.                     dic['question'] = question
  300.                 if line.strip():
  301.                     treatment(line, past_line, dic, tokens, sub_ans_index)
  302.                     past_line = line
  303.                 count += 1
  304.         else:
  305.             for line in itertools.islice(source_data, int(q_index[k]) - 1, none):
  306.                 sub_ans_index = int(q_index[k]) - 1 + count
  307.                 if line.strip() and tokens in line is not none:
  308.                     question = line
  309.                     error_file.writelines(question)
  310.                     question = re.sub(r'\r|\n|\t|\f|\v+$', "", question)
  311.                     q_i ^= 1
  312.                     dic['question'] = question
  313.                 if line.strip():
  314.                     treatment(line, past_line, dic, tokens, sub_ans_index)
  315.                     past_line = line
  316.                     q_i ^= 1
  317.                 count += 1
  318.         organize(tokens, source)
  319.         for key in dic['pgm']:
  320.             dic['pgm'][key] = 0
  321.         for key in dic['cmt']:
  322.             dic['cmt'][key] = 0
  323.         dic = copy.deepcopy(default_dic)
  324.         iteration += 1
  325.         #print(iteration)
  326.         error_file.writelines('\n' + "------ FIN DE BLOCK ------" + '\n' + '\n')
  327.  
  328.  
  329. def treatment(line, past_line, dic, tokens, sub_ans_index):
  330.     ### mask que je pensais fonctionner : ^[0-9]+\s*([.][ ]+[a-zA-Z]+).*$   ^([0-9]+\s*[.][ ]+).*$
  331.     ## MASK OH MYY : ^(\d+)\.\s+\(?(\d*[ ]*[a-zA-Z]+)\)*.*$
  332.     answer_dot_pattern = re.compile("^(\d+)\.\s+\(?(\d+|\d*[…]*[ ]*[\u00C0-\u017Fa-zA-Z._^%$#!~@,-]+)\)*.*$")
  333.     answer_par_pattern = re.compile("^(\d+)\)\s+\(?(\d+|\d*[…]*[ ]*[\u00C0-\u017Fa-zA-Z._^%$#!~@,-]+)\)*.*$")
  334.     comment_pattern = re.compile("^[-].*$")
  335.     end_f_pattern = re.compile("^[f]$")
  336.     special_space_ptrn = re.compile("^\r|\n|\t|\f|\v+$")
  337.     #special_spaces = re.compile("^(\r+|\n+|\t+|\f+|\v+)*$")
  338.     #sub_ansd_pattern = re.compile("^(\d+)\.\s+.*$")
  339.     #sub_ansp_pattern = re.compile("^(\d+)\)\s+.*$")
  340.     answers, filter, otxt, untreated = dic['answers'], dic['filter'], dic['otxt'], dic['untreated']
  341.     nbr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  342.     is_q = line.partition(' ')[0]
  343.  
  344.     if past_line != "":
  345.         if re.match(r'\d+[.][ ]+\d+\s*', line) is not none:
  346.             check = int(re.sub(r"[.][^.]*$", "", line)) - 1
  347.             check2 = str(check) + ' . ' + str(check)
  348.             if check2 in past_line and check >= 0:
  349.                 warning_line = "document usource.txt, ligne " + str(sub_ans_index) + " /!\/!\ NON TRAITEE :" + line
  350.                 error_file.writelines(warning_line)
  351.                 dic['untreated'] = warning_line
  352.                 return line
  353.     if is_q.isnumeric() is true and int(is_q) in nbr and re.match(r'^\d+[ ]\.[ ]\d+$', line) is not none:
  354.         line = ''
  355.     elif line.find("idef") != -1:
  356.         #re.sub(r'\n+$', "", line)
  357.         answers[0].append(line)
  358.     elif line.find("vdef") != -1:
  359.         #re.sub(r'\n+$', "", line)
  360.         answers[1].append(line)
  361.  
  362.     elif answer_par_pattern.search(line) is not none:
  363.         ans_int = re.search(r"\d+(?=\))", line).group()
  364.         tmp_line = re.sub(ans_int + r'\)(\s*)', "", line)
  365.         tmp_line = re.sub(special_space_ptrn, "", tmp_line)
  366.         tmp_line = "i" + ans_int + " " + "(" + ans_int + ")" + " " + '"' + tmp_line + '"'
  367.         answers[0].append(tmp_line)
  368.  
  369.     elif answer_dot_pattern.search(line) is not none:
  370.         ans_int = re.search(r"\d+(?=\.)", line).group()
  371.         tmp_line = re.sub(ans_int + r'\.(\s*)', "", line)
  372.         tmp_line = re.sub(special_space_ptrn, "", tmp_line)
  373.         tmp_line = "v" + ans_int + " " + "(" + ans_int + ")" + " " + '"' + tmp_line + '"'
  374.         answers[1].append(tmp_line)
  375.  
  376.     elif line.lower().find('filtre') != -1:
  377.         dic['filter'] = line
  378.     elif line.lower().find('otxt') != -1:
  379.         dic['otxt'] = 'OPENTEXT[2054] : "cols=54,rows=4"'
  380.  
  381.     elif re.match(r'^txt\d+\s*$', line):
  382.         line = re.sub(r'\s*', "", line)
  383.         dic['txt']['id'] = int(line.replace('txt', ""))
  384.     elif re.match(r'^\d+[ ]txt\d+\s*$', line):
  385.         line = re.sub(r'\s*', "", line)
  386.         dic['txt']['nbr_txt'] = int(re.search(r'^\d+', line).group())
  387.         dic['txt']['id'] = int(re.search(r'\d+$', line).group())
  388.  
  389.     elif line.lower().find('pgm') != -1:
  390.         line = line.lower()
  391.         line = line.replace('pgm', '')
  392.         pgm_ptrn = re.compile("^\s|\s*;\s*|\s+$")
  393.         digit = re.compile("\d")
  394.         for word in pgm_ptrn.split(line):
  395.             #if word != '' and word in dic['pgm']:
  396.             if word != '':
  397.                 if re.search(digit, word) is not none:
  398.                     test_word = re.sub(digit, "", word)
  399.                     if test_word in dic['pgm']:
  400.                         dic['pgm'][test_word] = int(word.replace(test_word, ""))
  401.                 elif word in dic['pgm']:
  402.                     dic['pgm'][word] = -1
  403.                 else:
  404.                     dic['pgm']['others'] = -1
  405.  
  406.     elif re.match(comment_pattern, line):
  407.         local_check = re.compile("(?<=[_])[0-9a-zA-Z]+(?=[_])")
  408.         local_check2 = re.search(local_check, line)
  409.         if local_check2 is not none:
  410.             local_tmp = local_check2.group()
  411.             line = line.replace('_' + local_tmp + '_', '@ANS:' + local_tmp + '$')
  412.         if line.find('-sdl') != -1:
  413.             line = line.replace('-sdl ', '@CLASS:sdl$').replace(
  414.                 '\n', '') + '@$"'
  415.             dic['cmt']['sdl'] = line
  416.         else:
  417.             line = line.replace('\n', "").replace('- ', '@CLASS:cons1$') + "@$"
  418.             dic['cmt']['simple'] = line
  419.  
  420.     elif re.match(end_f_pattern, line):
  421.         dic["end_f"] = 1
  422.  
  423.     elif line.find(tokens) == -1:
  424.         warning_line = "document usource.txt, ligne " + str(sub_ans_index) + " /!\/!\ NON TRAITEE :" + line
  425.         error_file.writelines(warning_line)
  426.         dic['untreated'] = warning_line
  427.         #data.writelines("Non traité :  " + line + '\n')
  428.         #data.writelines('| | |' + '\n')
  429.         #data.writelines('v v v' + '\n')
  430.     dic['answers'], dic['untreated'] = answers, untreated
  431.  
  432.  
  433.     return line
  434.  
  435.  
  436. def organize(tokens, source):
  437.         #source.seek(0)
  438.         key = dic.keys()
  439.         value = dic.values()
  440.         t_qidx = re.sub(r'([:]*|\s*)', "", tokens).lower()
  441.         t_ques = (re.sub(tokens + r'(\s*)*', "", dic["question"]))
  442.         sub_ans = dic['answers']
  443.         cmt_used = 0
  444. ##Faire les memes conditions de commentaires et pgm ici aussi
  445.         if len(sub_ans[0]) > 0 or len(sub_ans[1]) > 0:
  446.             if sub_ans[0] != [] and sub_ans[1] != []:
  447.                 lsa0, lsa1 = len(sub_ans[0]), len(sub_ans[1])
  448.                 cnt = 0
  449.                 l_used = lsa0
  450.                 ans_nbr = len(sub_ans[1])
  451.                 data.writelines(t_qidx + "[" + '\n')
  452.                 for lines in itertools.chain(sub_ans[0], sub_ans[1]):
  453.                     cnt += 1
  454.                     if cnt == l_used + 1:
  455.                         l_used = lsa1
  456.                         cnt = 1
  457.  
  458.                     if re.search(r'\"o::.+\"', lines) is not none:
  459.                         ans_id = int(re.search(r'(?<=\()\d+(?=\))', lines).group(0)) - 1
  460.                         lines = re.sub(r'\"o::.+\"', '"Autre, précisez : " + ' +
  461.                                     'othv' + str(ans_id) + ' : TEXT[100] : "size=20,maxlength=100"', lines)
  462.                         if l_used == lsa0:
  463.                             sub_ans[0][ans_id] = lines
  464.                         else:
  465.                             sub_ans[1][ans_id] = lines
  466.                     if re.search(r'\"x::.+\"', lines) is not none:
  467.                         lines = re.sub(r'x::', r'x - ', lines)
  468.                         ans_id = int(re.search(r'(?<=\()\d+(?=\))', lines).group(0)) - 1
  469.                         if l_used == lsa0:
  470.                             sub_ans[0][ans_id] = lines
  471.                         else:
  472.                             sub_ans[1][ans_id] = lines
  473.                     if lines == sub_ans[0][-1]:
  474.                         if len(dic['cmt']['sdl']) != 0:
  475.                             t_cmt = dic['cmt']['sdl']
  476.                             if dic['pgm']['mp'] != 0:
  477.                                 nbr_mp = dic['pgm']['mp']
  478.                                 str_nbr_mp = str(nbr_mp)
  479.                                 if dic['pgm']['mp'] == -1:
  480.                                     data.writelines('\t' + lines + '\n')
  481.                                     data.writelines("] " + t_ques + '\n' + t_cmt + '\n' +
  482.                                           '@CLASS:cons1$Plusieurs réponses possibles@$' + " : {" + '\n')
  483.                                 else:
  484.                                     data.writelines('\t' + lines + '\n')
  485.                                     data.writelines("] " + t_ques + '\n' + t_cmt + '\n' +
  486.                                           '@CLASS:cons1$' + str_nbr_mp + ' réponses possibles@$' + " : {" + '\n')
  487.                             else:
  488.                                 data.writelines('\t' + lines + '\n')
  489.                                 data.writelines("] " + t_ques + '\n' + t_cmt + " : {" + '\n')
  490.                             cmt_used ^= 1
  491.                         elif len(dic['cmt']['simple']) != 0:
  492.                             t_cmt = dic['cmt']['simple']
  493.                             if dic['pgm']['mp'] != 0:
  494.                                 nbr_mp = dic['pgm']['mp']
  495.                                 str_nbr_mp = str(nbr_mp)
  496.                                 if dic['pgm']['mp'] == -1:
  497.                                     data.writelines('\t' + lines + '\n')
  498.                                     data.writelines("] " + t_ques + '\n' + t_cmt + '\n' +
  499.                                           '@CLASS:cons1$Plusieurs réponses possibles@$' + " : {" '\n')
  500.                                 else:
  501.                                     data.writelines('\t' + lines + '\n')
  502.                                     data.writelines("] " + t_ques + '\n' + t_cmt + '\n' +
  503.                                           '@CLASS:cons1$' + str_nbr_mp + ' réponses possibles@$' + " : {" + '\n')
  504.                             else:
  505.                                 data.writelines('\t' + lines + '\n')
  506.                                 data.writelines("] " + t_ques + '\n' + t_cmt + " : {" + '\n')
  507.                             cmt_used ^= 1
  508.                         else:
  509.                             data.writelines('\t' + lines + '\n')
  510.                             data.writelines("] " + t_ques + " : {" + '\n')
  511.                     elif lines == sub_ans[1][-1]:
  512.                         data.writelines('\t' + lines + '\n')
  513.                         if dic['pgm']['mp'] != 0:
  514.                             if dic['pgm']['mp'] == -1:
  515.                                 str_ans_nbr = str(ans_nbr)
  516.                                 data.writelines('\t' + "}{" + str_ans_nbr + "} " + '\n')
  517.                                 data.writelines('\n')
  518.                             else:
  519.                                 nbr_mp = dic['pgm']['mp']
  520.                                 str_nbr_mp = str(nbr_mp)
  521.                                 data.writelines('\t' + "}{" + str_nbr_mp + "} " + '\n')
  522.                                 data.writelines('\n' + '\n')
  523.                         else:
  524.                             data.writelines('\t' + "} " + '\n')
  525.                             data.writelines('\n' + '\n')
  526.                     else:
  527.                         t_line = lines + ","
  528.                         data.writelines('\t' + t_line + '\n')
  529.  
  530.             elif sub_ans[0] != [] and sub_ans[1] == []:
  531.                 data.writelines(t_qidx + "[" + '\n')
  532.                 ans_nbr = len(sub_ans[0])
  533.                 for lines in sub_ans[0]:
  534.                     if re.search(r'\"o::.+\"', lines) is not none:
  535.                         ans_id = int(re.search(r'(?<=\()\d+(?=\))', lines).group(0)) - 1
  536.                         lines = re.sub(r'\"o::.+\"', '"Autre, précisez : " + ' +
  537.                                     'othv' + str(ans_nbr) + ' : TEXT[100] : "size=20,maxlength=100"', lines)
  538.                         sub_ans[0][ans_id] = lines
  539.                     if re.search(r'\"x::.+\"', lines) is not none:
  540.                         re.sub(r'x::', r'x - ', lines)
  541.                         ans_id = int(re.search(r'(?<=\()\d+(?=\))', lines).group(0)) - 1
  542.                         sub_ans[0][ans_id] = lines
  543.                     if lines == sub_ans[0][-1]:
  544.                         data.writelines('\t' + lines + '\n')
  545.                         data.writelines("] " + t_ques + '\n')
  546.                         data.writelines('\n' + '\n')
  547.                     else:
  548.                         t_line = lines + ","
  549.                         data.writelines('\t' + t_line + '\n')
  550.  
  551.             elif sub_ans[1] != [] and sub_ans[0] == []:
  552.                 ans_nbr = len(sub_ans[1])
  553.                 for lines in sub_ans[1]:
  554.                     if re.search(r'\"o::.+\"', lines) is not none:
  555.                         ans_id = int(re.search(r'(?<=\()\d+(?=\))', lines).group(0)) - 1
  556.                         lines = re.sub(r'\"o::.+\"', '"Autre, précisez : " + ' +
  557.                                     'othv' + str(ans_nbr) + ' : TEXT[100] : "size=20,maxlength=100"', lines)
  558.                         sub_ans[1][ans_id] = lines
  559.                     if re.search(r'\"x::.+\"', lines) is not none:
  560.                         lines = re.sub(r'x::', r'x - ', lines)
  561.                         ans_id = int(re.search(r'(?<=\()\d+(?=\))', lines).group(0)) - 1
  562.                         sub_ans[1][ans_id] = lines
  563.                     if len(sub_ans[1]) != 1:
  564.                         if lines == sub_ans[1][0]:
  565.                             if len(dic['cmt']['sdl']) != 0:
  566.                                 t_cmt = dic['cmt']['sdl']
  567.                                 if dic['pgm']['mp'] != 0:
  568.                                     nbr_mp = dic['pgm']['mp']
  569.                                     str_nbr_mp = str(nbr_mp)
  570.                                     if dic['pgm']['mp'] == -1:
  571.                                         data.writelines(t_qidx + ' "' + t_ques + '\n' + t_cmt + '\n' +
  572.                                               '@CLASS:cons1$Plusieurs réponses possibles@$' + '" : {' + '\n')
  573.                                     else:
  574.                                         data.writelines(t_qidx + ' "' + t_ques + '\n' + t_cmt + '\n' +
  575.                                           '@CLASS:cons1$' + str_nbr_mp + ' réponses possibles@$' + '" : {' + '\n')
  576.                                 else:
  577.                                     data.writelines(t_qidx + ' "' + t_ques + '\n' + t_cmt + '" : {' + '\n')
  578.                                 t_line = lines + ","
  579.                                 data.writelines('\t' + t_line + '\n')
  580.                                 cmt_used ^= 1
  581.  
  582.                             elif len(dic['cmt']['simple']) != 0:
  583.                                 t_cmt = dic['cmt']['simple']
  584.                                 if dic['pgm']['mp'] != 0:
  585.                                     nbr_mp = dic['pgm']['mp']
  586.                                     str_nbr_mp = str(nbr_mp)
  587.                                     if dic['pgm']['mp'] == -1:
  588.                                         data.writelines(t_qidx + ' "' + t_ques + '\n' + t_cmt + '\n' +
  589.                                               '@CLASS:cons1$Plusieurs réponses possibles@$' + '" : {' + '\n')
  590.                                     else:
  591.                                         data.writelines(t_qidx + ' "' + t_ques + '\n' + t_cmt + '\n' +
  592.                                           '@CLASS:cons1$' + str_nbr_mp + ' réponses possibles@$' + '" : {' + '\n')
  593.                                 else:
  594.                                     data.writelines(t_qidx + ' "' + t_ques + '\n' + t_cmt + '" : {' + '\n')
  595.                                 t_line = lines + ","
  596.                                 data.writelines('\t' + t_line + '\n')
  597.                                 cmt_used ^= 1
  598.  
  599.                             elif dic['pgm']['mp'] != 0:
  600.                                 nbr_mp = dic['pgm']['mp']
  601.                                 if dic['pgm']['mp'] == -1:
  602.                                     data.writelines(t_qidx + ' "' + t_ques + '\n' +
  603.                                           '@CLASS:cons1$Plusieurs réponses possibles@$' + '" : {' + '\n')
  604.                                     t_line = lines + ","
  605.                                     data.writelines('\t' + t_line + '\n')
  606.  
  607.                                 else:
  608.                                     str_nbr_mp = str(nbr_mp)
  609.                                     data.writelines(t_qidx + ' "' + t_ques + '\n' +
  610.                                           '@CLASS:cons1$' + str_nbr_mp + ' réponses maximum' + '\n' +
  611.                                           '@|Merci de sélectionner au maximum' + str_nbr_mp + ' réponses'
  612.                                           ' dans la liste suivante.@$' '" : {' + '\n')
  613.                                     t_line = lines + ","
  614.                                     data.writelines('\t' + t_line + '\n')
  615.                             else:
  616.                                 data.writelines(t_qidx + ' "' + t_ques + '" : {' + '\n')
  617.                                 t_line = lines + ","
  618.                                 data.writelines('\t' + t_line + '\n')
  619.  
  620.                         elif lines == sub_ans[1][-1]:
  621.                             data.writelines('\t' + lines + '\n')
  622.                             if dic['pgm']['mp'] != 0:
  623.                                 if dic['pgm']['mp'] == -1:
  624.                                     str_ans_nbr = str(ans_nbr)
  625.                                     data.writelines('\t' + "}{" + str_ans_nbr + "}" + '\n')
  626.                                     data.writelines('\n' + '\n')
  627.                                 else:
  628.                                     nbr_mp = dic['pgm']['mp']
  629.                                     str_nbr_mp = str(nbr_mp)
  630.                                     data.writelines('\t' + "}{" + str_nbr_mp + "}" + '\n')
  631.                                     data.writelines('\n' + '\n')
  632.  
  633.                             elif dic['pgm']['dp'] == -1:
  634.                                 data.writelines('\t' + '} : "dropdown=yes"' + '\n')
  635.                                 data.writelines('\n' + '\n')
  636.                             #dic[pgm][ri] à init dans le root check le cahier
  637.                             else:
  638.                                 data.writelines('\t' + "} " + '\n')
  639.                                 data.writelines('\n' + '\n')
  640.                         else:
  641.                             t_line = lines + ","
  642.                             data.writelines('\t' + t_line + '\n')
  643.                     else:
  644.                         if len(dic['cmt']['sdl']) != 0:
  645.                             t_cmt = dic['cmt']['sdl']
  646.                             data.writelines(t_qidx + ' "' + t_ques + '\n' + t_cmt + '" : {' + '\n')
  647.                             data.writelines('\t' + lines + '\n')
  648.                             data.writelines('\t' + "} " + '\n')
  649.                             data.writelines('\n' + '\n')
  650.                             cmt_used ^= 1
  651.                         elif len(dic['cmt']['simple']) != 0:
  652.                             t_cmt = dic['cmt']['simple']
  653.                             data.writelines(t_qidx + ' "' + t_ques + '\n' + t_cmt + '" : {' + '\n')
  654.                             data.writelines('\t' + lines + '\n')
  655.                             data.writelines('\t' + "} " + '\n')
  656.                             data.writelines('\n' + '\n')
  657.                             cmt_used ^= 1
  658.             else:
  659.                 data.writelines("Check fichier non traité pour :  " + tokens + '\n')
  660.  
  661.         #Faux car otxt normalement est pour les reponses pas pour les questions
  662.         if dic['otxt'] != "":
  663.             if len(dic['cmt']['sdl']) != 0:
  664.                 t_cmt = dic['cmt']['sdl']
  665.                 data.writelines(
  666.                     t_qidx + ' "' + t_ques + '\n' + t_cmt + '" : ' + 'OPENTEXT[2054] : "cols=54,rows=4"' + '\n')
  667.                 data.writelines('\n' + '\n')
  668.                 cmt_used ^= 1
  669.             elif len(dic['cmt']['simple']) != 0:
  670.                 t_cmt = dic['cmt']['simple']
  671.                 data.writelines(
  672.                     t_qidx + ' "' + t_ques + '\n' + t_cmt + '" : ' + 'OPENTEXT[2054] : "cols=54,rows=4"' + '\n')
  673.                 data.writelines('\n' + '\n')
  674.                 cmt_used ^= 1
  675.             else:
  676.                 data.writelines(
  677.                     t_qidx + ' "' + t_ques + '" : ' + 'OPENTEXT[2054] : "cols=54,rows=4"' + '\n')
  678.                 data.writelines('\n' + '\n')
  679.         if dic['cmt'] is not none and cmt_used != 1:
  680.             if len(dic['cmt']['sdl']) != 0:
  681.                 t_cmt = dic['cmt']['simple']
  682.                 t_qidx_tmp = copy.deepcopy(t_qidx)
  683.                 if dic['txt']['nbr_txt'] != 1:
  684.                     t_qidx = t_qidx + "[" + str(dic['txt']['nbr_txt']) + "]"
  685.                 if dic['txt']['id'] == 5:
  686.                     data.writelines(t_qidx + ' "' + t_ques + '\n' + t_cmt +
  687.                                     '" : ' + 'TEXT[5] : "size=5,maxlength=5"' + '\n')
  688.                     data.writelines('\n' + '\n')
  689.                 elif dic['txt']['id'] == 15:
  690.                     data.writelines(t_qidx + ' "' + t_ques + '\n' + t_cmt +
  691.                                     '" : ' + 'TEXT[15] : "size=15,maxlength=15"' + '\n')
  692.                     data.writelines('\n' + '\n')
  693.                 elif dic['txt']['id'] == 100:
  694.                     data.writelines(t_qidx + ' "' + t_ques + '\n' + t_cmt +
  695.                                     '" : ' + 'TEXT[100] : "size=20,maxlength=100"' + '\n')
  696.                     data.writelines('\n' + '\n')
  697.                 elif dic['txt']['id'] == 150:
  698.                     data.writelines(t_qidx + ' "' + t_ques + '\n' + t_cmt +
  699.                                     '" : ' + 'TEXT[150] : "size=45,maxlength=150"' + '\n')
  700.                     data.writelines('\n' + '\n')
  701.             elif len(dic['cmt']['simple']) != 0:
  702.                 t_cmt = dic['cmt']['simple']
  703.                 t_qidx_tmp = copy.deepcopy(t_qidx)
  704.                 if dic['txt']['nbr_txt'] != 1:
  705.                     t_qidx = t_qidx + "[" + str(dic['txt']['nbr_txt']) + "]"
  706.                 if dic['txt']['id'] == 5:
  707.                     data.writelines(t_qidx + ' "' + t_ques + '\n' + t_cmt +
  708.                                     '" : ' + 'TEXT[5] : "size=5,maxlength=5"' + '\n')
  709.                     data.writelines('\n' + '\n')
  710.                 elif dic['txt']['id'] == 15:
  711.                     data.writelines(t_qidx + ' "' + t_ques + '\n' + t_cmt +
  712.                                     '" : ' + 'TEXT[15] : "size=15,maxlength=15"' + '\n')
  713.                     data.writelines('\n' + '\n')
  714.                 elif dic['txt']['id'] == 100:
  715.                     data.writelines(t_qidx + ' "' + t_ques + '\n' + t_cmt +
  716.                                     '" : ' + 'TEXT[100] : "size=20,maxlength=100"' + '\n')
  717.                     data.writelines('\n' + '\n')
  718.                 elif dic['txt']['id'] == 150:
  719.                     data.writelines(t_qidx + ' "' + t_ques + '\n' + t_cmt +
  720.                                     '" : ' + 'TEXT[150] : "size=45,maxlength=150"' + '\n')
  721.                     data.writelines('\n' + '\n')
  722.                     #fonctionne pas cf BJ18223- FDJ - Etude Contentieux
  723.                 else:
  724.                     data.writelines(t_qidx + ' "' + t_ques + '\n' + t_cmt + '" : ' + '\n')
  725.                     data.writelines('\n' + '\n')
  726.                 t_qidx = copy.deepcopy(t_qidx_tmp)
  727.  
  728.         #if dic['pgm'] is not None:
  729.         #    sub_pgm = dic['pgm']
  730.         #    for elem in sub_pgm.values():
  731.         #        if elem == 1:
  732.         #            print(int(elem))
  733.  
  734.         #if dic['filter'] is not None:
  735.         #    print('filtre : ' + dic['filter'])
  736.  
  737.         elif dic['untreated']:
  738.             data.writelines('untreated : ' + dic['untreated'] + '\n')
  739.  
  740.         cmt_used ^= 1
  741.  
  742.  
  743. main()
Parsed in 0.414 seconds