IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windev Mobile Discussion :

Conversion bdd tableau


Sujet :

Windev Mobile

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien hardware
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien hardware
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut Conversion bdd tableau
    Bonjour, je fais suite à mon précédent post car j'ai continué à développer mon application, mais j'ai malheureusement fait face à un problème. En effet, le problème de mon code est le parcours du fichier texte à chaque requête, et bien évidemment pour des fichiers qui font plusieurs milliers de lignes, le temps d'attente peut-être long si la ligne recherchée se situe à la fin du fichier. J'ai donc pensé qu'à chaque ouverture de l'appli, il y ait un écran de chargement durant lequel il va y avoir une conversion du fichier texte en variable tableau afin d'augmenter la vitesse de recherche.
    Mais à vrai dire, je suis dans une impasse car j'ai essayé de coder quelque chose mais je n'arrive pas du tout à faire fonctionner ceci.

    Voici le code en question de la fenêtre qui s'ouvre au démarrage de l'application :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    PROCEDURE MaFenêtre()
    NomCheminFichier est une chaîne
    IDFichier est un entier
    LigneLue est une chaîne
    MonTableau est un tableau <agrandissement=N> de 5 par 1 chaînes 
    //
    //// Sélection du nom et du chemin du fichier
    NomCheminFichier="C:\Users\lab\Desktop\basededonnees.txt"
    //NomCheminFichier = "\My Documents\basededonnees.txt"
    //// Ouverture du fichier
    IDFichier = fOuvre(NomCheminFichier)
    //// Affichage du message d'erreur si l'ouverture n'a pas été effectuée
    SI IDFichier = -1 ALORS
    	Erreur(ErreurInfo(errMessage)+"Essayez de resynchronisez votre base de données.")
    SINON
    	BOUCLE
    		// Lecture de la première ligne du fichier
    		LigneLue = fLitLigne(IDFichier)
    		SI ErreurDétectée ALORS
    			Erreur(ErreurInfo())
    			SORTIR
    FIN
    // Fin de fichier ?
     
     
    SI LigneLue = EOT ALORS 			SORTIR
    //ChaîneVersTableau(Lignelue, MonTableau, TAB)
    TableauAjouteLigne(MonTableau,ExtraitChaîne(LigneLue,1, [TAB]), ExtraitChaîne(LigneLue,2, [TAB]), ExtraitChaîne(LigneLue,3, [TAB]), ExtraitChaîne(LigneLue,4, [TAB]), ExtraitChaîne(LigneLue,5, [TAB]))
    FIN
     
    FIN
    //Ouvre(FEN_MENU)

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 93
    Points : 166
    Points
    166
    Par défaut
    Bonjour,
    Essayez de passer par une zone mémoire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    IF ChargeFichier(ComplèteRep(fRepEnCours())+"Interro_bdd.csv") THEN // charge le fichier txt dans la zone mémoire
    	Trace(SearchBarCode("01ASPE07"))
    	Trace(SearchBarCode("01ASP99"))
    END
    Fonction de chargement (renvois true si tout est ok)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    PROCEDURE ChargeFichier(NomCheminFichier est une chaîne):booléen
    IDFichier est un entier
    DataLine est une chaîne ANSI
     
    IF MemExiste("DATAFILE") THEN MemSupprimeTout("DATAFILE")
    MemCrée("DATAFILE")
     
    IDFichier = fOuvre(NomCheminFichier)
    IF IDFichier = -1 THEN 
    	Erreur(ErreurInfo(errMessage))
    	RENVOYER False
    END
     
    DataLine = fLitLigne(IDFichier)
    WHILE DataLine <> EOT
    	IF DataLine <> "" THEN
    		MemAjoute("DATAFILE", ExtraitChaîne(DataLine,1,";"), DataLine)
    		MemTrie("DATAFILE")
    	END
    	DataLine = fLitLigne(IDFichier)
    END
     
    RENVOYER MemOccurrence("DATAFILE")>0
    Fonction de recherche (renvoie la ligne si tout est ok)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    PROCEDURE SearchBarCode(pCodeLu est une chaîne):chaîne
    IF MemExiste("DATAFILE") THEN
    	IF MemOccurrence("DATAFILE") > 0 THEN
    		RENVOYER MemRecherche("DATAFILE", pCodeLu)
    	END
    END
    RENVOYER ""

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien hardware
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien hardware
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Bonjour et merci comme toujours pour votre réponse rapide
    Malheureusement, les fonctions fRepEnCours, et toutes les déclinaisons de Mem sont interdites en Windows Mobile !

    J'ai trouvé ce morceau de code pour m'inspirer, qu'en pensez vous?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    sFichier est une chaîne = fChargeTexte(<Cheminfichier>)
    sUneLigne est une chaîne
     
    POUR TOUTE CHAINE sUneLigne DE sFichier SEPAREE PAR RC
    TableAjoute("NomTable", Remplace(suneligne,";",TAB))
    FIN

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 93
    Points : 166
    Points
    166
    Par défaut
    Bonjour,
    Désolé j'avais zappé le fait que vous étiez en mobile. Il reste la solution du tableau associatif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //code global du projet
    TabFile est un tableau associatif de chaîne ANSI
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    //Chargement du fichier dans le tableau associatif TabFile
    PROCEDURE ChargeFichier(pFileName est une chaîne ANSI)
    DataFile, DataLine est une chaîne ANSI
     
    pFileName = SansEspace(pFileName)
    IF pFileName = "" THEN RENVOYER False
     
    IF fFichierExiste(pFileName) THEN
     
    	DataFile = SansEspace(fChargeTexte(pFileName))
    	IF DataFile = "" THEN RENVOYER False
     
    	FOR ALL STRING DataLine OF DataFile SEPARATED BY RC
    		DataLine = SansEspace(DataLine)
    		IF DataLine <> "" THEN 
    			TabFile[ExtraitChaîne(DataLine, 1, ";") ] = DataLine
    		END
    	END
     
    END
    RENVOYER Dimension(TabFile) > 0
    Maintenant si vous voulez les données pour l'article "01ASPE07", il suffit de tester si TabFile["01ASPE07"] renvoie quelque chose Si c'est une chaine vide alors c'est le code recherché n'existe pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    FileName est une chaîne ANSI = "<Nom complet de votre fichier csv>"
    IF ChargeFichier(FileName) THEN
    	Trace(TabFile["01ASPE07"] <> "" ? "Trouvé : "+TabFile["01ASPE07"] ELSE "Absent")
    	Trace(TabFile["XXXXXXX"] <> "" ? "Trouvé : "+TabFile["XXXXXXX"] ELSE "Absent")	
    END

  5. #5
    Candidat au Club
    Homme Profil pro
    Technicien hardware
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien hardware
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Votre code à l'air de fonctionner, je vous dis le résultat des que j'ai chargé l'appareil mobile...

  6. #6
    Candidat au Club
    Homme Profil pro
    Technicien hardware
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien hardware
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Commercique Voir le message
    Votre code à l'air de fonctionner, je vous dis le résultat des que j'ai chargé l'appareil mobile...
    Alors je ne sais pas ce qui se passe mais sur l'appareil ça ne fonctionne pas. Voilà comment j'ai codé : Quand j'appuie sur le bouton "Interrogation produits" du menu principal , voilà ce qui se passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    PROCEDURE INTERNE ChargeFichier(pFileName est une chaîne ANSI)
    	DataFile, DataLine est une chaîne ANSI
     
    	pFileName = SansEspace(pFileName)
    	IF pFileName = "" THEN RENVOYER False
     
    	IF fFichierExiste(pFileName) THEN
     
    		DataFile = SansEspace(fChargeTexte(pFileName))
    		IF DataFile = "" THEN RENVOYER False
     
    		FOR ALL STRING DataLine OF DataFile SEPARATED BY RC
    			DataLine = SansEspace(DataLine)
    			IF DataLine <> "" THEN 
    				TabFile[ExtraitChaîne(DataLine, 1, TAB) ] = DataLine
    			END
    		END
     
    	END
     
    	RENVOYER Dimension(TabFile) > 0
     
    FIN
    //FileName est une chaine ANSI = "C:\Users\lab\Desktop\basededonnees.txt"
    FileName est une chaîne ANSI = "\My Documents\basededonnees.txt"
     
    ChargeFichier(FileName) 
    Ouvre(FEN_SAISIE_EAN)
    Tel que je lis le code, il transforme le fichier en tableau puis ouvre la fenêtre de l'application. Quand je lance la simulation sur pc cela à l'air de fonctionne puisque quand je rentre une reference valide il remplis les bons champs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SI SAI_EAN = "00000" ALORS FinProgramme()
    SI SAI_EAN = "" ALORS RepriseSaisie(SAI_EAN)
    SI TabFile[SAI_EAN]<> "" ALORS
    	LIB_Nom=ExtraitChaîne(TabFile[SAI_EAN],2,TAB)
    	LIB_AchatHT = NumériqueVersChaîne(Val(Remplace(ExtraitChaîne(TabFile[SAI_EAN], 3, [TAB]),",",".")), "10.2fS")+" €"//px achat
    	LIB_PublicHT = NumériqueVersChaîne(Val(Remplace(ExtraitChaîne(TabFile[SAI_EAN], 4, [TAB]),",",".")), "10.2fS")+" €"//px vente
    	LIB_PublicTTC = NumériqueVersChaîne(Val(Remplace(ExtraitChaîne(TabFile[SAI_EAN], 5, [TAB]),",",".")), "10.2fS")+" €"//px vente ttc
    SINON
    	LIB_Nom="Article Inconnu"
    	LIB_AchatHT = "0 000,00 €"
    	LIB_PublicHT = "0 000,00 €"
     
     
    FIN
    Sur le pc ça a l'air de fonctionner normalement, par contre quand je le charge sur le terminal mobile j'arrive sur le menu principal (normal) mais quand je clique sur "Interrogation produits" rien ne se produit du tout, même si je mets le fichier avec seulement 100lignes de texte et en patientant 20min...

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 93
    Points : 166
    Points
    166
    Par défaut
    Voici le test que je viens de faire sur un Samsung Note3. Une fenêtre avec deux boutons
    1) Fermer l'application
    2) Tester

    Dans le code du projet je déclare le tableau associatif en global
    Dans le code "Déclarations globales" de la fenêtre j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    FileName est une chaîne ANSI = SysRepCarteStockage() + [fSep()] + "bdd.csv"
     
    CréeDbbDemo()   // pour pouvoir me créer un fichier de 2000 lignes différentes ce que vous n'avez pas à faire
     
    IF ChargeFichier(FileName) THEN             // 2000 lignes en 0.5 s
    	Info(ChaîneConstruit("Fichier chargé avec %1 enregistrements", Dimension(TabFile)))   // affiche bien 2000
    ELSE 
    	Erreur("Echec de chargement du fichier !")
    END
    le bouton test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    IF TabFile["01ASPE0056"] <> "" THEN
    	Info("Trouvé : "+TabFile["01ASPE0056"])
    ELSE 
    	Erreur("Absent")
     
    END
     
    IF TabFile["XXXXXXX"] <> "" THEN
    	Info("Trouvé : "+TabFile["XXXXXXX"])
    ELSE 
    	Erreur("Absent")
    END
    Avec 2000 lignes cela prend : 0.5 secondes, pour créer le tableau.

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 93
    Points : 166
    Points
    166
    Par défaut
    Temps moyen de chargement du fichier csv :
    2000 lignes on est dans les 0.3 s
    4000 lignes on est dans les 0.4 s
    8000 lignes on est dans les 0.8 s

    Je ne sais pas si cela à un effet (je pense que oui), mais le fichier csv que j'utilise pour le test est déjà trié sur le code...

  9. #9
    Candidat au Club
    Homme Profil pro
    Technicien hardware
    Inscrit en
    Juillet 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien hardware
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2017
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par PhilDeDakar Voir le message
    Temps moyen de chargement du fichier csv :
    2000 lignes on est dans les 0.3 s
    4000 lignes on est dans les 0.4 s
    8000 lignes on est dans les 0.8 s

    Je ne sais pas si cela à un effet (je pense que oui), mais le fichier csv que j'utilise pour le test est déjà trié sur le code...
    Ce code m'a tout l'air d'être efficace je teste cela

Discussions similaires

  1. [MySQL] Boucle comparer bdd / tableau
    Par jiojio dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/01/2010, 11h15
  2. Conversion de tableau EXCEL vers table HTML en ligne
    Par superccman dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 10/01/2010, 10h55
  3. Réponses: 1
    Dernier message: 22/04/2009, 17h06
  4. Conversion de tableau de byte en types primitifs
    Par soft0613 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 14/03/2008, 15h14
  5. Conversion type tableau
    Par ivihy dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 05/01/2007, 14h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo