Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 15 déc. 2008 à 21:02
Bonjour,
ok, pour faire les 10000 lignes tu fais un programme de test avec une boucle.
Bonne chance pour la suite.
Cordialement. Bacterius !
JeremyLecouvert
Messages postés139Date d'inscriptionmardi 27 novembre 2007StatutMembreDernière intervention10 mai 20102 15 déc. 2008 à 10:14
Merci pour ces commentaires.
@Bacterius:
J'ai tendance à nommer certaines de mes variables locales ou paramètres de fonctions avec des "_", pour les distinguer des variables globales. Ceci dit, je comprends que tu ne trouves pas ça très "beau"... et le simple fait que ça te rappelle les variables windaube m'incite à modifier ma façon de les nommer!!
Pour ce qui est de la démo, j'avoue que j'avais pas envie de me taper un fichier de 500 (ou 10000) lignes à la mano juste pour l'exemple!
L'utilisateur peut choisir le nombre de fichiers téléchargés simultanément: il y a un TEdit qui sert à ça. Cette valeur (MaxDL=4), c'est juste une valeur arbitraire par défaut au cas ou l'utilisateur ne renseignerait pas le TEdit... même chose pour le répertoire de base par défaut. Cette appli répond d'abord à un besoin personnel, donc je me suis pas pris la tête à sortir ces paramètres (dans un fichier ini, par exemple), mais libre à chacun de faire la modif.
Pour ce qui est du TObjectList, je ne l'ai encore jamais utilisé..mais je te remercie, je vais regarder ça de + près quand j'aurai un moment.
@+.
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 12 déc. 2008 à 17:35
procedure TFormMain.BtnOpenTxtClick(Sender: TObject);
var
buff, _url, _dest: String;
_lst: TStringList;
begin
OpnDlg.Filter:= 'Fichier CSV|*.csv';
if OpnDlg.Execute then
begin
//Initialisation
LblTemps.Caption:= 'Temps total: ';
t0:= GetTime;
DLTotal:=0;
AssignFile(fic, OpnDlg.FileName);
Reset(fic);
BtnPause.Enabled:= True;
_lst:= TStringList.Create;
DLTotal:=0;
RepDL:= EdtDest.Text;
//Traitement du fichier
while not eof(fic) do
begin
Readln(fic, buff);
Tokenize(_lst, buff, ';');
//Construction des noms de fichiers source et destination
_url:= _lst.Strings[0];
_dest:= StringReplace(_lst.Strings[1], '/', '\', [rfreplaceall]);
if MidStr(_dest, Length(_dest), 1)<>'\' then
_dest:= _dest + '\';
_dest:= repDL + _dest + _lst.Strings[2];
//Download
while (DLCourants>=GetMaxDL) or Pause do
Application.ProcessMessages;
ShowTime;
GetFichier(_url, _dest);
_lst.Clear;
end;
CloseFile(fic);
_lst.Free;
BtnPause.Enabled:= False;
end; // end if OpnDlg
end;
_______________________________
Evite les "_" devant les variables, c'est pas beau, ça fait penser à des types Windows (en effet, la plupart des types natifs de programmation Windows qui nous sont transmis par Windows.pas sont écrits de la sorte "_TokenPrivilege" par exemple)
Sinon personnellement les algorithmes d'itération intelligente m'ont toujours fasciné (par exemple mettre dans un fichier texte "TuFaisCa20FoisAvecLaVariable[x=index d'iteration]".
Néanmoins ici, beaucoup de code pour une démonstration un peu légère ... tu aurais pu encore faire ressortir les avantages de ce genre de procédé en mettant une liste de 10000 fichiers (peu importe si les URL sont faux, de toute façon on les téléchargera pas tous), et montrer la comparaison fichier "brut" et fichier "intelligent" ^^
Parce que pour 20 fichiers, bon ... avec les ordis actuels on est pas à 1 Ko près ^^
Ensuite :
"MaxDL= 4; //nombre maximum de DL simultanés par défaut"
Ca serait bien de laisser l'utilisateur choisir en fonction de son débit, de ce qu'il faut, par exemple entre 2 et 10 (pas plus, sinon Windows va le sentir).
Une constante est utilisée pour stocker une valeur qui ne changera jamais : ici, l'utilisateur se sentira frustré s'il ne peut pas télécharger ses photos 5 par 5 ... lol ^^
"repDLDef='C:\Downloads\';"
Même remarque.
Et puis si tu as du temps à perdre, penses à TObjectList (ajoute Contnrs en unité interface), c'est beaucoup plus utile et cool que les "array of type", et mieux sécurisé au niveau de la mémoire et tout).
Voilà, bon courage, je n'ai pas testé mais je pense que c'est pas mal ;)
Cordialement, Bacterius !
offlake
Messages postés190Date d'inscriptionmercredi 3 septembre 2008StatutMembreDernière intervention17 janvier 2009 12 déc. 2008 à 09:27
Bonjour,
C bien Comme application
Je pense que le niveau débutant n'est pas bien attribuer donc je vous donne 7/10
Bonne continuation
BY OFFLAKE
15 déc. 2008 à 21:02
ok, pour faire les 10000 lignes tu fais un programme de test avec une boucle.
Bonne chance pour la suite.
Cordialement. Bacterius !
15 déc. 2008 à 10:14
@Bacterius:
J'ai tendance à nommer certaines de mes variables locales ou paramètres de fonctions avec des "_", pour les distinguer des variables globales. Ceci dit, je comprends que tu ne trouves pas ça très "beau"... et le simple fait que ça te rappelle les variables windaube m'incite à modifier ma façon de les nommer!!
Pour ce qui est de la démo, j'avoue que j'avais pas envie de me taper un fichier de 500 (ou 10000) lignes à la mano juste pour l'exemple!
L'utilisateur peut choisir le nombre de fichiers téléchargés simultanément: il y a un TEdit qui sert à ça. Cette valeur (MaxDL=4), c'est juste une valeur arbitraire par défaut au cas ou l'utilisateur ne renseignerait pas le TEdit... même chose pour le répertoire de base par défaut. Cette appli répond d'abord à un besoin personnel, donc je me suis pas pris la tête à sortir ces paramètres (dans un fichier ini, par exemple), mais libre à chacun de faire la modif.
Pour ce qui est du TObjectList, je ne l'ai encore jamais utilisé..mais je te remercie, je vais regarder ça de + près quand j'aurai un moment.
@+.
12 déc. 2008 à 17:35
var
buff, _url, _dest: String;
_lst: TStringList;
begin
OpnDlg.Filter:= 'Fichier CSV|*.csv';
if OpnDlg.Execute then
begin
//Initialisation
LblTemps.Caption:= 'Temps total: ';
t0:= GetTime;
DLTotal:=0;
AssignFile(fic, OpnDlg.FileName);
Reset(fic);
BtnPause.Enabled:= True;
_lst:= TStringList.Create;
DLTotal:=0;
RepDL:= EdtDest.Text;
//Traitement du fichier
while not eof(fic) do
begin
Readln(fic, buff);
Tokenize(_lst, buff, ';');
//Construction des noms de fichiers source et destination
_url:= _lst.Strings[0];
_dest:= StringReplace(_lst.Strings[1], '/', '\', [rfreplaceall]);
if MidStr(_dest, Length(_dest), 1)<>'\' then
_dest:= _dest + '\';
_dest:= repDL + _dest + _lst.Strings[2];
//Download
while (DLCourants>=GetMaxDL) or Pause do
Application.ProcessMessages;
ShowTime;
GetFichier(_url, _dest);
_lst.Clear;
end;
CloseFile(fic);
_lst.Free;
BtnPause.Enabled:= False;
end; // end if OpnDlg
end;
_______________________________
Evite les "_" devant les variables, c'est pas beau, ça fait penser à des types Windows (en effet, la plupart des types natifs de programmation Windows qui nous sont transmis par Windows.pas sont écrits de la sorte "_TokenPrivilege" par exemple)
Sinon personnellement les algorithmes d'itération intelligente m'ont toujours fasciné (par exemple mettre dans un fichier texte "TuFaisCa20FoisAvecLaVariable[x=index d'iteration]".
Néanmoins ici, beaucoup de code pour une démonstration un peu légère ... tu aurais pu encore faire ressortir les avantages de ce genre de procédé en mettant une liste de 10000 fichiers (peu importe si les URL sont faux, de toute façon on les téléchargera pas tous), et montrer la comparaison fichier "brut" et fichier "intelligent" ^^
Parce que pour 20 fichiers, bon ... avec les ordis actuels on est pas à 1 Ko près ^^
Ensuite :
"MaxDL= 4; //nombre maximum de DL simultanés par défaut"
Ca serait bien de laisser l'utilisateur choisir en fonction de son débit, de ce qu'il faut, par exemple entre 2 et 10 (pas plus, sinon Windows va le sentir).
Une constante est utilisée pour stocker une valeur qui ne changera jamais : ici, l'utilisateur se sentira frustré s'il ne peut pas télécharger ses photos 5 par 5 ... lol ^^
"repDLDef='C:\Downloads\';"
Même remarque.
Et puis si tu as du temps à perdre, penses à TObjectList (ajoute Contnrs en unité interface), c'est beaucoup plus utile et cool que les "array of type", et mieux sécurisé au niveau de la mémoire et tout).
Voilà, bon courage, je n'ai pas testé mais je pense que c'est pas mal ;)
Cordialement, Bacterius !
12 déc. 2008 à 09:27
C bien Comme application
Je pense que le niveau débutant n'est pas bien attribuer donc je vous donne 7/10
Bonne continuation
BY OFFLAKE