begin process at 2010 02 10 07:56:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Algorithme

 > 

Autre

 > 

Incompréhensible


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Incompréhensible

mardi 29 avril 2008 à 11:39:47 | Incompréhensible

darnau


Bonjour,
Je me permet de solliciter à nouveau votre aide.
Voila je ne comprend pas un problème... Pourquoi une instruction que je répète 361 fois fonctionne si je saisis 361 fois les instructions correspondantes et ne fonctionne pas dans une boucle for i:=0 to 361 do :

J'ai uploadé mon projet sur free.fr à l'adresse suivante : http://dl.free.fr/otwSd2Zds/LOGGPS.zip

Le code n'étant pas commenté (Pardon d'avance...) je consulterais régulièrement le forum pour répondre à vos éventuelles questions.

En vous remerciant!
Cordialement,

Arnaud
mardi 29 avril 2008 à 11:44:21 | Re : Incompréhensible

dominique.stock

Bonjour,
Attention de 0 à 361 cela fait 362 fois ...

Dom
mardi 29 avril 2008 à 11:49:43 | Re : Incompréhensible

darnau

Ah oui en effet dsl c'est une faute de frappe...Mais je n'ai pas fait l'erreur dans mon projet!

De quoi cela peut il bien venir ??

D@rNaU
mardi 29 avril 2008 à 11:55:06 | Re : Incompréhensible

dominique.stock

impossible d'ouvrir ton zip
Poste ton code + message erreur

Dom
mardi 29 avril 2008 à 11:57:37 | Re : Incompréhensible

Sat83

Bonjour,

Qu'est ce qui pose problème exactement?

Poste le bout de code posant problème ici, je pense que ce sera mieux.
mardi 29 avril 2008 à 12:10:33 | Re : Incompréhensible

darnau



unit LOGGPS;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Dessin, uDm;

type
  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    Edit1: TEdit;
    Ed_type: TEdit;
    Label1: TLabel;
    Ed_Xmin: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Ed_Ymin: TEdit;
    Label4: TLabel;
    Ed_Xmax: TEdit;
    Label5: TLabel;
    Label6: TLabel;
    Ed_Ymax: TEdit;
    Ed_Version: TEdit;
    Label7: TLabel;
    Button2: TButton;
    Memo1: TMemo;
    Ed_FileLength: TEdit;
    procedure Button1Click(Sender: TObject);
    function HexToDouble(i64 : int64): string;
    function HexToInt (Value:string) : Integer;
    procedure Button2Click(Sender: TObject);
    function DoubleToInt(Value: string) : String;
    procedure TraitementHeader();
    procedure TraitementFichier();
    function Lire(Position : integer; Boucle : integer; mode:string) : string;
    procedure FormCreate(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  f : TFileStream;
  l, c, PosActual: Integer;
  num, o , Inutile: String;
  Premier : Boolean ;
  Form1: TForm1;
  FileName : string;
  ShapeType: string;

implementation

{$R *.dfm}


procedure Tform1.TraitementFichier();
var
        Index, X : integer;
        chaine : string;
begin
   Inutile:=IntToStr(HexToInt(Lire(PosActual,4,'Big')));
   Memo1.Lines.Add(Inutile);
   Index:= Memo1.Lines.IndexOf(Inutile);
   Memo1.lines.add(Lire(PosActual,4,'Big'));
   ShapeType:=Lire(PosActual, 4, 'Little');
   if ShapeType = '00000001' then begin
        chaine:=HexToDouble(StrToInt64('$'+Lire(PosActual, 8, 'Little')))+''' , '''+HexToDouble(StrToInt64('$'+Lire(PosActual, 8, 'Little')));
        dm.QMBR2.close;
        dm.QMBR2.SELECTSql.Clear;
        dm.QMBR2.SELECTsql.add('INSERT INTO POINT (X, Y) VALUES ('''+chaine+''')');
        dm.QMBR2.open;
        dm.TRMBR.CommitRetaining;
        //Memo1.Lines[Index]:=Memo1.Lines[Index]+ '  -   Point : ' ;
        //Memo1.lines.add(HexToDouble(StrToInt64('$'+Lire(PosActual, 8, 'Little')))+ '    -     '+HexToDouble(StrToInt64('$'+Lire(PosActual, 8, 'Little'))));
    end
    else if ShapeType = '00000005' then begin

        Memo1.Lines[Index]:=Memo1.Lines[Index]+ '  -   MBR : ' ;
        Memo1.lines.add(HexToDouble(StrToInt64('$'+Lire(PosActual, 8, 'Little')))+ '    -     '+HexToDouble(StrToInt64('$'+Lire(PosActual, 8, 'Little')))+ '    -     '+HexToDouble(StrToInt64('$'+Lire(PosActual, 8, 'Little')))+ '    -     '+HexToDouble(StrToInt64('$'+Lire(PosActual, 8, 'Little'))));
        Memo1.lines.add(IntToStr(HexToInt(Lire(PosActual, 4, 'Little'))));
        Memo1.lines.add(IntToStr(HexToInt(Lire(PosActual, 4, 'Little'))));
        Memo1.lines.add(IntToStr(HexToInt(Lire(PosActual, 4, 'Little'))));


        chaine:=HexToDouble(StrToInt64('$'+Lire(PosActual, 8, 'Little')))+''' , '''+HexToDouble(StrToInt64('$'+Lire(PosActual, 8, 'Little')));
        dm.QMBR2.close;
        dm.QMBR2.SELECTSql.Clear;
        dm.QMBR2.SELECTsql.add('INSERT INTO POINT (X, Y) VALUES ('''+chaine+''')');
        dm.QMBR2.open;
        dm.TRMBR.CommitRetaining;
        chaine:='';

        chaine:=HexToDouble(StrToInt64('$'+Lire(PosActual, 8, 'Little')))+''' , '''+HexToDouble(StrToInt64('$'+Lire(PosActual, 8, 'Little')));
        dm.QMBR2.close;
        dm.QMBR2.SELECTSql.Clear;
        dm.QMBR2.SELECTsql.add('INSERT INTO POINT (X, Y) VALUES ('''+chaine+''')');
        dm.QMBR2.open;
        dm.TRMBR.CommitRetaining;
             x:=x+1;


// Avec donc 361 fois l'instruction précédente le code fonctionne et rendre les données dans la base...

        {
    x:=0;
        while x < 360 do
        begin
                chaine:=HexToDouble(StrToInt64('$'+Lire(PosActual, 8, 'Little')))+''' , '''+HexToDouble(StrToInt64('$'+Lire(PosActual, 8, 'Little')));
                dm.QMBR2.close;
                dm.QMBR2.SELECTSql.Clear;
                dm.QMBR2.SELECTsql.add('INSERT INTO POINT (X, Y) VALUES ('''+chaine+''')');
                dm.QMBR2.open;
                dm.TRMBR.CommitRetaining;
                x:=x+1;
        end;
        }

    end;

end;

procedure Tform1.TraitementHeader();
Var
        FileLength : Extended;
        chaine : string;
        test: integer;
begin

    Edit1.Text:=Lire(PosActual,2,'Big');
    Inutile:=Lire(PosActual,20, 'Big');
    Ed_FileLength.Text:=Lire(PosActual,4,'Big');
    FileLength:=HexToInt(Ed_FileLength.Text);
    Ed_FileLength.Text:=FloatToStr(FileLength/2);
    Ed_Version.Text:=Lire(PosActual,4, 'Little');
    Ed_type.Text:=Lire(PosActual,4, 'Little');
    if StrToInt(Ed_type.Text) = 1 then begin
        Label1.Caption:='C''est un point';
        ShapeType:='00000001';
    end
    else if StrToInt(Ed_type.Text) = 5 then begin
        Label1.Caption:= 'C''est des polygones';
        ShapeType:='00000005';
    end;
    Ed_Xmin.Text:=Lire(PosActual, 8, 'Little');
    Ed_Ymin.Text:=Lire(PosActual,8, 'Little');
    Ed_Xmax.Text:=Lire(PosActual,8, 'Little');
    Ed_Ymax.text:=Lire(PosActual,8, 'Little');
    Edit1.Text:=IntToStr(HexToInt(Edit1.Text));
    Ed_Xmin.Text:=(HexToDouble(StrToInt64('$'+Ed_Xmin.Text)));
    Ed_Ymin.Text:=(HexToDouble(StrToInt64('$'+Ed_Ymin.Text)));
    Ed_Xmax.Text:=(HexToDouble(StrToInt64('$'+Ed_Xmax.Text)));
    Ed_Ymax.Text:=(HexToDouble(StrToInt64('$'+Ed_Ymax.Text)));
    Ed_Version.Text:=IntToStr(HexToInt(Ed_Version.Text));
        CHAINE:=Ed_Xmin.Text+''','''+Ed_Xmax.Text+''','''+Ed_Ymin.Text+''','''+Ed_Ymax.Text;
        dm.QMBR2.close;
        dm.QMBR2.SELECTSql.Clear;
        test:=dm.QMBR2.SELECTsql.add('INSERT INTO MBR (XMIN, XMAX, YMIN, YMAX) VALUES ('''+chaine+''')');
        Memo1.Lines.Add(dm.QMBR2.SelectSQL[test]);
        //dm.QMBR2.SELECTsql.Add('  VALUES('+chaine+')');
        dm.QMBR2.open;
        dm.TRMBR.CommitRetaining;

    end;

function Tform1.Lire(Position : integer; Boucle : integer; mode:string) : string;
var
    c : Integer;

  begin
    PosActual:=PosActual+Boucle;
    f.Position := Position;
    SetLength(o, 16);
    f.Read(o[1], 16);
    if mode = 'Big' then begin
        for c:=1 to Boucle do begin
           Result:=Result+IntToHex(ord(o[c]),2);
        end;
    end
    else begin
        c:=Boucle;
        while c <> 0 do begin
                Result:=Result+IntToHex(ord(o[c]),2);
                c:=c-1;
        end;
    end;
   end;
procedure TForm1.Button1Click(Sender: TObject);
begin

    PosActual:=2;
    Edit1.Text:='';
    Ed_type.Text:='';
    Ed_Xmin.text:='';
    Ed_Ymin.Text:='';
    Ed_Xmax.Text:='';
    Ed_Ymax.Text:='';
    Ed_Version.Text:='';
    premier:=true;
    if OpenDialog1.Execute then begin
    FileName:=OpenDialog1.FileName;
    f := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
    TraitementHeader();
    PosActual:=PosActual+32;
    while PosActual <  HexToInt(Ed_FileLength.Text) do
        TraitementFichier();
    end;
end;


function TForm1.HexToDouble(i64 : int64): string;
var
  r: Double absolute i64; // r a donc la même adresse que i64, et tous les 2 sont codés sur 8 octets
begin
        // on affecte l'un des deux
  //ShowMessage(FloatToStr(r)); // et on lit l'autre...
  result:=FloatToStr(r)  ;
end;

Function TForm1.HexToInt (Value:string) : Integer;
begin
result := StrToInt('$'+ Value);
end;

function TForm1.DoubleToInt(Value : string) : string;
var i : integer;
ResultTemp :string;

begin
ResultTemp := '';
for i:=1 to 32 do begin

        if Value[i] = ',' then
                break
        Else
                ResultTemp:=ResultTemp+Value[i];
end;
        Result:=ResultTemp;
end;

end.

Le message d'erreur quand je remplace les instruction par une boucle for ou while:
Le projet ProjLOGGPS.exe a provoqué une classe d'exception EConvertError avec le message "$4013F8468F781F3D4013F85B882DA821' n'esr pas une valeur entière correcte'. Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.

mardi 29 avril 2008 à 12:31:48 | Re : Incompréhensible

dominique.stock

à quelle itération plante-t'il ?
Quelle ligne ?


Dom
mardi 29 avril 2008 à 12:39:14 | Re : Incompréhensible

darnau

Alors je vien de regarder, c'est donc durant le deuxième passage dans la boucle après l'initialisation de la valeur de Chaine. Tout de suite après..

D@rNaU
mardi 29 avril 2008 à 13:19:01 | Re : Incompréhensible

dominique.stock

chaine:=HexToDouble(StrToInt64('$'+Lire(PosActual, 8, 'Little')))+''' , '''+HexToDouble(StrToInt64('$'+Lire(PosActual, 8, 'Little')));
c'est donc cette chaine qui plante lors de la deuxième itération ( pour info : il y en a 360 et pas 361)
avant de créer la chaine , fais afficher le résultat des lire()  dans un memo+
controle le strtoint64  et le Hextodouble ...


Dom
mardi 29 avril 2008 à 13:23:15 | Re : Incompréhensible

darnau

Ce que je ne comprend pas c'est que mon programme fonctionne parfaitement si je remplace la boucle for par un GROS copier/coller (360) des lignes suivantes:

        chaine:=HexToDouble(StrToInt64('$'+Lire(PosActual, 8, 'Little')))+''' , '''+HexToDouble(StrToInt64('$'+Lire(PosActual, 8, 'Little')));
        dm.QMBR2.close;
        dm.QMBR2.SELECTSql.Clear;
        dm.QMBR2.SELECTsql.add('INSERT INTO POINT (X, Y) VALUES ('''+chaine+''')');
        dm.QMBR2.open;
        dm.TRMBR.CommitRetaining;

Merci du temps que tu me consacres dom...

D@rNaU

1 2

Cette discussion est classée dans : fonctionne, free, incompréhensible, fr


Répondre à ce message

Sujets en rapport avec ce message

Connection et gestion de MySQL [ par SMoG ] comment connecter mon executable a ma base de données mysql de chez free, en récupérant des informations ?SMoGhttp://ploofgames.free.fr/ http://progzed.free.fr [ par DelphiCool ] Salutje vous inform juste que www.progzed.comdemenage surhttp://progzed.free.fr---------------------------------- DelphiCool http://progzed. page recherche dans forum ne fonctionne pas [ par mike255 ] je ne sais pas si cela vient de moi mais les sujets sont bien listes apres la demande de recherche mais les liens qui y menent sont morts et a notre a Connexion SQL (Niveau Debutant) Need Help :) [ par SMOnline ] Bonjour, j'ai chercher comment concretement me connecter a une bdd comme free par exemple (qui n'a pas un chemin = a localhost mais un chemin propre : la source "dev-PHP" ne fonctionne pas chez moi, help please [ par cyriax ] salut tout le mondevoila j'ai telechargé cette source :http://prdownloads.sourceforge.net/devphp/devphp193src.tar.gzsur le site: http://devphp.sourcef Problemes FTP Free [ par quentinrammstein ] turlutu chapeau pointubonjour a tous, j'ai un petit probleme avec le composant NMFTP. je n'arrive pas a me connecter a mon compte free. j'ai essayé l' Quelles dll inclures avec un prog delphi pour qu'il fonctionne [ par bebeb3 ] Bonjour, Je viens de finir un programme utilisant un hook du clavier. Il fonctionne parfaitement sauf lorsque je le lance sur d'autres PC que le m Le bureau de windows [ par norton ] Bonsoir a tous ...J'avais vu dans labo(projets communs) que des presonnes avait essayer de faire un système d'exploitation.Moi j'aimerais savoir comme erreur dans une listview incompréhensible [ par gandalf_fb ] j'ai réalisé en Delphi un exe avec une listview. l'exe tourne trés bien sur mes deux ordi (Win2000), aucun probleme. les lignes de la listview apparai j'ai créé une base de données qui fonctionne sur mon PC mais pas ailleurs [ par DGPat ] Bonjour à tous,Je suis débutant, (encore un),J'ai créé une application pour me faciliter la vie au travail (je suis comptable) j'ai créé plusieurs bas


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,515 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales