Itérer les lignes vers le basSalut,
Je suis nouveau sur JMP/JSL mais j'ai de l'expérience avec Java et j'écris actuellement un programme qui doit parcourir une colonne de données d'adresse et vérifier si l'adresse est déjà dans le système ; si tel est le cas, il doit remplir de nouvelles colonnes avec les valeurs de latitude et de longitude. J'utilise des tableaux associatifs et voici ce que j'ai jusqu'à présent :
NomsDefaultToHere(1); //toutes les variables locales
rawData = Open("Kevin-PriceAnalysis-DO Basis US à April.jmp");
Tableau de données actuel (rawData); //tableau de données actuel défini sur la liste des hôpitaux
adresse = Colonne (rawData, "Adresse complète");
dt_latMap = Tableau associatif (adresse, rawData:Latitude); // mappe l'adresse complète unique à la latitude
dt_longMap = Tableau associatif (adresse, rawData:Longitude); // mappe l'adresse complète unique à la longitude
dt_coord = new Table("Coordonnées",
Nouvelle colonne("Lat", Numérique, Continu, Format("Lat DDD", 24, 14)),
Nouvelle colonne("Long", Numérique, Continu, Format("Long DDD", 24, 14))
); //nouvelle table de données de coordonnées (vide)
For(i = 1, i <= N Rows(rawData), i++, //itère les données brutes, vérifie si elles sont contenues dans la carte
If(Contient(dt_latMap, adresse[i]), //si oui met à jour les coordonnées
dt_coord:Lat = dt_latMap< dt_coord:Long = dt_longMap< !Contains(dt_latMap, adresse[i]), //sinon, continuez la boucle
continuer();
);
);
Je reçois toujours le message « Impossible de définir la valeur pour « Lat » car le numéro de ligne (-1) n'est pas valide. Je pensais que cela pourrait être un problème avec le nom des colonnes, mais j'ai essayé de changer les noms des colonnes. Toute aide serait grandement appréciée ! Merci!
Re : Itérer les lignes vers le basMerci beaucoup!
Re : Itérer les lignes vers le basJe viens de parcourir votre code en utilisant la table San Francisco Crime.jmp. Désolé, je ne l'ai pas remarqué auparavant, mais la table dt_coord n'a aucune ligne. Lorsque les critères sont remplis dans votre If(), ajoutez d’abord une ligne. Utilisez ensuite ce numéro de ligne comme indice de la référence de votre colonne.
Contains( dt_latMap, address[i] ), //if yes updates coordinates
dt_coord << Add Rows( 1 );
r = N Rows( dt_coord );
dt_coord:Lat[r] = dt_latMap << Get Value( address[i] );
dt_coord:Long[r] = dt_longMap << Get Value( address[i] );,
Re : Itérer les lignes vers le basSalut Wendy,
J'ai essayé de changer tous les noms de colonnes et de variables et j'ai toujours le même problème. Depuis, j'ai modifié le code qui remplit le tableau associatif en tant que tel :
Pour(j = 1, j<= N Lignes(rawData),j++,
Si(!Contains(dt_latMap, adresse[j]),
dt_latMap << Insérer (adresse[j], rawData:Latitude[j]),
!Contient(dt_LongMap,adresse[j]),
dt_longMap << Insert(adresse[j], rawData:Longitude[j]);
)
);
mais je reçois toujours le numéro de ligne invalide, disant cette fois que l'index est 0. Est-ce que j'oublie de définir la ligne actuelle quelque part ? Merci!
Re : Itérer les lignes vers le basBonjour,
Il semble que vous ayez un nom de colonne et un nom de variable JSL identiques. Voir le Prévention des conflits de noms de colonnes et de noms de variables dans la documentation en ligne.
J'espère que cela est utile.