Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2757 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  Découpage de liste intelligent

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Découpage de liste intelligent

n°1087908
007seb
Posté le 18-05-2005 à 14:49:15  profilanswer
 

Bonjour,
 
Je dois découper un fichier texte (que je nommerai "A" ) de 360.000 lignes en plusieurs fichiers texte d'environ 20.000 lignes chacun (20.000 étant un nombre approximatif car saisi par l'utilisateur et compris entre 15000 et 30000, mais peu importe).
Chaque ligne de "A" commence par un code fournisseur en " lettres (disons CAR pour Carrefour par exemple).
 
Dans les 360.000 lignes, il y a environ 100 codes fournisseurs différents mais triés dans l'ordre alphabétique : exemple du fichier (en plus petit) :
 
AABgqregeazgzerget
AABrhjyrjyejyjyeru
AABdkzghelkghekhlo
CDEzraelghreihamki
CDErezagmhezrgahuj
DATioazyrzpeioygak
DATfrzrthrznrtyhhy
DATzeagvzregaezgee
DATzargzrgazgrezgy
DATzregazrgrezgaze
ZENrzayjuutkukukut
ZENerazgzervyjeryj
ZENfjdvjkhfjhqsjkv
ZIMezqbgtrhzethrth
ZIMuyktyukrykukrkk
ZIMopreuiioerzeiou
ZIMazdsahjvxhjahjg
 
(dans cet exemple, il n'y a que 5 codes fournisseur : AAB, CDE, DAT, ZEN et ZIM)
 
Je souhaite découper ce fichier (ou tableau car j'en ai fait un tableau de structure) en sous-fichiers ou sous-tableaux dont la taille s'approche le plus possible de 20000 lignes.
 
Evidemment, la difficulté du problème c'est que je souhaite ne pas séparer un même fournisseur dans 2 fichiers ou tableaux différents.
 
Ici, dans notre exemple, si le nombre de lignes n'était pas 20.000 mais 7, ça donnerait des sous-tableaux comme ceci :
 
Sous-tableau1 :
 
AABgqregeazgzerget
AABrhjyrjyejyjyeru
AABdkzghelkghekhlo
CDEzraelghreihamki
CDErezagmhezrgahuj
 
Sous-tableau2 :
 
DATioazyrzpeioygak
DATfrzrthrznrtyhhy
DATzeagvzregaezgee
DATzargzrgazgrezgy
DATzregazrgrezgaze
ZENrzayjuutkukukut
ZENerazgzervyjeryj
ZENfjdvjkhfjhqsjkv
 
Sous-tableau3 :
 
ZIMezqbgtrhzethrth
ZIMuyktyukrykukrkk
ZIMopreuiioerzeiou
ZIMazdsahjvxhjahjg
 
J'espère avoir été clair.
Le résultat de l'algo ne doit pas forcément être plusieurs sous-tableaux, mais un tableau récapitulatif de cette forme :
 
TR[1]="ABB-CDE"
TR[2]="DAT-ZEN"
TR[3]="ZIM-ZIM"
 
Je cherche, je cherche, mais je ne suis pas assez intelligent pour trouver cet algo...
Si quelqu'un pouvait m'aider un peu, c'est avec grand plaisir.
 
Merci d'avance.

mood
Publicité
Posté le 18-05-2005 à 14:49:15  profilanswer
 

n°1088657
suizokukan
Posté le 18-05-2005 à 23:44:44  profilanswer
 

> A vue de nez, je construirais un dictionnaire associant chaque code fournisseur à un nombre, le nombre de fois où apparaît ce code dans le fichier.
On obtient alors un dictionnaire D du type :
    D(1) : ABB=75,  
    D(2) : ABD=86,
    ...
    D(n) : ZIM = 82.
 
Puis tu ajoutes les valeurs numériques de D(1)+D(2)+... jusqu'à tomber sur 20000 -> disons que tu t'arrête par exemple à D(250) et tu obtiens un premier fichier.
Puis tu recommences à partir de D(251)+D(252)+... jusqu'à obtenir à nouveau 20000, etc.
 
Qu'en penses-tu ?

n°1088726
007seb
Posté le 19-05-2005 à 08:17:02  profilanswer
 

C'est une très bonne idée. Au moins je suis sûr de ne pas scinder un fournisseur dans deux fichiers différents. Pas bête du tout, je vais essayer ça. Merci.
 
edit: Jamais je n'aurais cru qu'un prof de lettre puisse m'en apprendre en programmation  :D  Comme quoi... Internet n'a pas fini de m'étonner :-)


Message édité par $@m le 19-05-2005 à 08:21:22
n°1091647
007seb
Posté le 21-05-2005 à 15:20:08  profilanswer
 

Pour info, c'est grace à la méthode de suizokan que j'ai réussi cet algo. La petite différence quand même c'est que je ne devais pas m'arrêter sur 20.000 mais le plus près de 20.000 possible... là résidait la difficulté.
 
J'aurais bien mis le code, mais il est tellement spécifique qu'il ne serait pas exploitable par quelqu'un d'autre.

n°1092304
Taz
bisounours-codeur
Posté le 22-05-2005 à 12:48:19  profilanswer
 

est-ce que chaque ligne fait exactement la même taille ?

n°1109106
Giz
Posté le 06-06-2005 à 00:22:19  profilanswer
 

moi j'aurais tout simplement utiilisé une méthode "seuillage" des lignes : je coupe au bon endroit tout en étant le plus proche possible de 20000 lignes...je ne pense pas qu'il faille bien chercher plus loin. [:spamafote]. Il faut donc en gros voir combien de lignes j'ai si je coupe en défaut et si je coupe en excès. Je garde la valeur seuil qui me convient le mieux.
 
Exemple :
 
AABgqregeazgzerget
AABrhjyrjyejyjyeru
AABdkzghelkghekhlo
CDEzraelghreihamki
CDErezagmhezrgahuj
DATioazyrzpeioygak
DATfrzrthrznrtyhhy
DATzeagvzregaezgee
DATzargzrgazgrezgy
DATzregazrgrezgaze
 
Ci-dessus, avec 7 lignes, soit tu prends  
 
AABgqregeazgzerget
AABrhjyrjyejyjyeru
AABdkzghelkghekhlo
CDEzraelghreihamki
CDErezagmhezrgahuj
 
= 5 lignes
 
ou bien tout
 
= 10 lignes
 
Bon comme 7 est plus proche de 5, tu gardes le paquet de 5 ; sinon ca serait ete le contraire, Sinon, si c t pile poil au milieu, tu prends un paquet au pif.


Message édité par Giz le 06-06-2005 à 00:26:37

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  Découpage de liste intelligent

 

Sujets relatifs
liste des types retournés avec mysql_fetch_fieldsEffacer le contenu d'une zone de liste (Access 2003)
LotusScript - Liste des documents d'une vueprob de liste avec 2 champs de comparaison
[Java] Obtenir la liste des sessions d'un serveur J2EERécupération des données d'une liste d'un formulaire
Affectation d'un recordset à une zone de listeValeur dans une liste déroulante en vba
tête de liste chainéeAffectation d'une valeur à un élément d'une liste chainée
Plus de sujets relatifs à : Découpage de liste intelligent


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR