real basic

BBFUNK01

Membre actif
18 Octobre 2009
119
0
42
Bourg en Bresse
Hello,

je débute ce jour même dans Real Studio 2010, et j'avoue que les débuts sont délicats, surtout du fait que la doc est limitée (car essentiellement en anglais... et l'anglais et moi...). Bref, j'en suis aux "phases de tests" histoire de me familiariser un peu avec "l'engin", et je bloque rapidement sur un truc : créer un dossier au sein d'une arborescence, enfin créer un dossier tout court finalement.

En suivant la doc j'ai essayé ceci :

Sub CopyFileorFolder (source as FolderItem, destination as FolderItem)
Dim i as Integer
Dim newFolder as FolderItem
If source.directory then //it's a folder
newFolder=destination.child(source.name)
newFolder.createAsFolder
For i=1 to source.count //go through each item
If source.item(i).directory then
//it's a folder
CopyFileOrFolder source.item(i), newFolder
//recursively call this
//routine passing it the folder
else
source.item(i).CopyFileTo newFolder
//it's a file so copy it
end if
next
else //it's not a folder
source.CopyFileTo destination
end if

Mais évidemment j'ai une erreur dès la 1ère ligne :
Sub CopyFileorFolder (source as FolderItem, destination as FolderItem)

Dois-je déclarer mes variables au préalable ? (ce que j'ai essayé ... Mais probablement pas comme il aurait fallu)
Où y aurait-il un truc que je n'aurais pas pigé ?

Si un adepte de real basic / real studio avait l'amabilité d'éclairer ma lanterne ce serait on ne peut plus généreux de sa part, car habitué à l'action script, j'avoue que là je patauge considérablement au "démarrage" :nailbiting:.

Merci,

BBFUNK01
 
Ce code est une méthode, il faut créé la méthode avant ( à gauche de la fenêtre, menu contextuel ajouter à Nom de la fenêtre --> méthodes)
remplir les champs
il faut l'appeler la méthode dans un ( event de la fenêtre, event d'un menu ou un event d'un contrôle ( bouton par exemple)) avec comme paramètre deux objets Folderitem.


Voici un code pour créer un dossier avec un dialogue demandant dans quel dossier le créer :
Bloc de code:
  Dim dlg as New SelectFolderDialog
  Dim f,newFolder as FolderItem
  dlg.ActionButtonCaption="Select"
  dlg.Title="Sélectionnez un dossier"
  dlg.PromptText="Un nouveau dossier sera créé dans le dossier sélectionné."
 
  f=dlg.ShowModal()
  If f <> Nil then // la variable f n'est pas Nil, sinon l'utilisateur à cancellé
    newFolder=f.child("Dossier sans titre 1234") // concaténation du chemin avec le nom du nouveau dossier 
    newFolder.createAsFolder // creation du dossier
  end if

SI c'est dans un dossier défini à l'avance, exemple le dossier "Documents"
Bloc de code:
  Dim f,newFolder as FolderItem
  f=SpecialFolder.Documents // le chemin du dossier Documents (Mac et Windows)
  newFolder=f.child("Dossier sans titre 1234")  // concaténation du chemin avec le nom du nouveau dossier 
  newFolder.createAsFolder // creation du dossier
 
Un grand merci à toi Mac_Jac, je vais tester ton code de suite afin de bien piger le fonctionnement.
Autrement une autre question que je me pose :
comment organiser le code dans Real Studio ? J'entends par là où poser tel ou tel code, par exemple je suis en train de faire un test tout simple : j'ai créé une fenêtre contenant plusieurs TextFields, j'ai également créé un bouton, l'idée est de pouvoir incrémenter un tableau d'une String qui sera composée des valeurs des TextFields à chaque clic sur le bouton. Donc, j'ai tout naturellement déclaré mon array sur ma fenêtre, puis sur le bouton je définis les actions pour incrémenter le tableau... Mais j'obtiens alors une erreur me disant que l'incrémentation du tableau que j'essaie de faire est une méthode qui n'existe pas...

Bref, en action script on a le "loisir" de pouvoir mettre du code un peu partout, méthode dont je ne suis pas du tout client, je préfère rédiger mon code à un seul et même endroit et définir les actions grâce aux écoutes d'événements. Mais est-ce possible dans Real Studio ?
Et donc, ma question subsidiaire : comment placer son code dans Real Studio pour avoir une application fonctionnelle ? Je m'y perds un peu car je ne sais pas encore s'il faut placer les actions propres aux éléments sur les éléments eux-mêmes ou s'il est possible de définir des actions grâce aux noms d'occurrence des éléments.

Merci ;),

BBFUNK01

p.s.: si à tout hasard tu sais où je peux trouver de bons tutos en français je suis preneur ;)
 
Mais j'obtiens alors une erreur me disant que l'incrémentation du tableau que j'essaie de faire est une méthode qui n'existe pas...
Montre ton code.

je préfère rédiger mon code à un seul et même endroit et définir les actions grâce aux écoutes d'événements. Mais est-ce possible dans Real Studio ?
C'est impossible de mettre tout le code à la même place.

Et donc, ma question subsidiaire : comment placer son code dans Real Studio pour avoir une application fonctionnelle ?
1- Lire (en anglais ) le fichier REAL Studio Tutorial.pdf, il est dans le dossier "Documentation" du dossier "Real Studio".

2- Ouvrir quelques projets dans le dossier "Examples" du dossier "Real Studio".

3- Faire des recherches sur ce site (mailing liste en français) http://support.realsoftware.com/listarchives/realbasic-nug.fr/


p.s.: si à tout hasard tu sais où je peux trouver de bons tutos en français je suis preneur ;)
Il n'y a pas de tutoriel en français pour Real Studio, Realbasic en avait (2 ou 3), mais le logiciel n'est plus du tout pareil.
 
Re,

je vois que toi aussi tu es un couche-tard :D.

Bon, concernant mon code avec les array, et bien du coup je l'ai effacé car je suis parti sur une autre piste, grâce entre autre au code que tu m'as donné.
Bon, j'ai clairement du boulot pour maîtriser un temps soit peu le truc donc je vais me coller à la lecture et à la décortiquation des exemples fournis.
Néanmoins si le coeur t'en dit je joins au post le code que j'essaie de bidouiller, en gros c'est la création d'un dossier qui est nommé en fonction des différentes combinaisons potentielles du contenu de 4 TextFields (ce qui fonctionne grâce à ton code), et j'essaie par la même occasion de générer un fichier.text à l'intérieur du dossier créé, fichier.txt que je parviens à créer mais pas en même temps.
Si le coeur ne t'en dit pas ne te carre pas, de toute manière je débute (depuis tout à l'heure 20h), donc je ne serai pas un pro d'ici demain :D, et puis tu m'as déjà considérablement aidé, donc un grand merci à toi :up:.

A plus,

BBFUNK01

---------- Nouveau message ajouté à 02h29 ---------- Le message précédent a été envoyé à 02h27 ----------

...Bon, je ne vais pas tarder à aller me coucher car j'ai oublié de joindre le code dont je parlais à l'instant (signe de fatigue avancée...) :

TextField5.Text = TextField1.Text + " " + TextField2.Text + " " + TextField3.Text + " " + TextField4.Text

Dim Art1 as String = TextField1.Text

Dim Art2 as String = TextField2.Text

Dim Art3 as String = TextField3.Text

Dim Art4 as String = TextField4.Text

Dim Nom as String = ""

if Art1 = Art2 and Art3 = Art4 then
Nom = Art1 + "-" + Art3
elseIf Art1 = Art2 and Art2 = Art3 and Art3 <> Art4 or Art1 <> Art2 and Art2 = Art3 and Art3 = Art4 then
Nom = Art1 + "-" + Art4
elseIf Art1 = Art2 and Art3 <> Art4 or Art1 <> Art2 and Art3 = Art4 or Art1 <> Art2 and Art2 <> Art3 and Art3 <> Art4 then
Nom = Art1 + "-amalgame"
end if

Dim dlg as New SelectFolderDialog
Dim f,newFolder as FolderItem
dlg.ActionButtonCaption="Select"
dlg.Title="Sélectionnez un dossier"
dlg.PromptText="Un nouveau dossier sera créé dans le dossier sélectionné."

f=dlg.ShowModal()
If f <> Nil then // la variable f n'est pas Nil, sinon l'utilisateur à cancellé
newFolder=f.child(Nom) // concaténation du chemin avec le nom du nouveau dossier
newFolder.createAsFolder // creation du dossier
Dim stream as TextOutputStream
fich=GetSaveFolderItem(TextField1.Text,Art1 + "-amalgame" + ".fea")
stream=TextOutputStream.Create(f)
f.MacCreator="ttxt"
Stream.WriteLine ("ArtPro Grid Layout File V1.0")
Stream.WriteLine (Art1 + "," + Art2 + "," + Art3 + "," + Art4)
Stream.WriteLine (Art1 + "," + Art2 + "," + Art3 + "," + Art4)
Stream.Close
end if

//la partie qui crée un fichier.txt que je tente d'insérer lors de la création du dossier :
Dim fich as FolderItem
Dim stream as TextOutputStream
fich=GetSaveFolderItem(TextField1.Text,Art1 + "-amalgame" + ".fea")
If fich <> Nil then
stream=TextOutputStream.Create(f)
fich.MacCreator="ttxt"
Stream.WriteLine ("ArtPro Grid Layout File V1.0")
Stream.WriteLine (Art1 + "," + Art2 + "," + Art3 + "," + Art4)
Stream.WriteLine (Art1 + "," + Art2 + "," + Art3 + "," + Art4)
Stream.Close
End if

Pas très probant pour l'instant, n'est-ce pas ? :mouais:

Good night ;)
 
Bonjour,

Chez moi, il n'est pas tard 22h12 en ce moment.

Il manquait la déclaration (Dim) de la variable fich.
Et une erreur dans cette ligne
Bloc de code:
stream=TextOutputStream.Create(f)
la variable f au lieu de fich
Mais c'est normal, tu débutes avec la fatigue en plus.:rateau:


Voici la partie du code modifié
Bloc de code:
  Dim dlg as New SelectFolderDialog
  Dim f, newFolder, fich as FolderItem
  dlg.ActionButtonCaption="Select"
  dlg.Title="Sélectionnez un dossier"
  dlg.PromptText="Le  dossier '" +Nom+"' sera créé dans le dossier sélectionné."
  
  f=dlg.ShowModal()
  If f <> Nil then // la variable f n'est pas Nil, sinon l'utilisateur à cancellé
    newFolder=f.child(Nom) // concaténation du chemin du dossier sélectionné avec le nom du nouveau dossier
    newFolder.createAsFolder // création du dossier
    fich=newFolder.child(Nom + ".fea") // concaténation du chemin du dossier créé avec le nom du fichier texte 
    Dim stream as TextOutputStream =TextOutputStream.Create(fich) // création du fichier texte (.fea)
    Stream.WriteLine ("ArtPro Grid Layout File V1.0")
    Stream.WriteLine (Art1 + "," + Art2 + "," + Art3 + "," + Art4)
    Stream.WriteLine (Art1 + "," + Art2 + "," + Art3 + "," + Art4)
    Stream.Close
  end if
Donc, la seule vraie modification est le remplacement du dialogue GetSaveFolderItem
Aussi, le MacCreator ttxt n'est pas nécessaire, TextOutputStream l'est par défaut
 
Hello,

je débute ce jour même dans Real Studio 2010, et j'avoue que les débuts sont délicats, surtout du fait que la doc est limitée (car essentiellement en anglais... et l'anglais et moi...). Bref, j'en suis aux "phases de tests" histoire de me familiariser un peu avec "l'engin", et je bloque rapidement sur un truc : créer un dossier au sein d'une arborescence, enfin créer un dossier tout court finalement.

En suivant la doc j'ai essayé ceci :

Sub CopyFileorFolder (source as FolderItem, destination as FolderItem)
Dim i as Integer
Dim newFolder as FolderItem
If source.directory then //it's a folder
newFolder=destination.child(source.name)
newFolder.createAsFolder
For i=1 to source.count //go through each item
If source.item(i).directory then
//it's a folder
CopyFileOrFolder source.item(i), newFolder
//recursively call this
//routine passing it the folder
else
source.item(i).CopyFileTo newFolder
//it's a file so copy it
end if
next
else //it's not a folder
source.CopyFileTo destination
end if

Mais évidemment j'ai une erreur dès la 1ère ligne :
Sub CopyFileorFolder (source as FolderItem, destination as FolderItem)

Dois-je déclarer mes variables au préalable ? (ce que j'ai essayé ... Mais probablement pas comme il aurait fallu)
Où y aurait-il un truc que je n'aurais pas pigé ?

Si un adepte de real basic / real studio avait l'amabilité d'éclairer ma lanterne ce serait on ne peut plus généreux de sa part, car habitué à l'action script, j'avoue que là je patauge considérablement au "démarrage" :nailbiting:.

Merci,

BBFUNK01

Loin de moi l'idée de critiquer ton choix BBFUNK, mais je voudrais bien comprendre pourquoi tu t'es orienté vers real basic, solution payante alors que tu as déjà gratuitement XCode avec tous ce qu'il faut ?

L'effort d'apprentissage pour toi est à mon sens le même, puisque tu pars de presque rien :)D , je ne veux pas dénigrer hein )
 
Hello,

désolé pour la réponse tardive, Mac_jac : je n'ai pas encore testé ta correction de code, en tout cas merci infiniment pour tes lumières :up:.
MTCUBIX : Xcode ? Je ne connais pas. En fait j'ai téléchargé la cersion démo de Real Studio car dans mon entreprise on envisage de développer quelques petits utilitaires histoire d'amenuiser le côté récalcitrant de certaines tâches (...quelle belle phrase que celle que je viens d'écrire :D...). Néanmoins je n'ai jamais entendu parlé de Xcode, mais bien évidemment je vais me renseigner dessus car si c'est une solution gratuite qui offre une puissance non négligeable quand au développement d'applications et bien forcément ça m'intéresse.

A plus,

BBFUNK01
 
Hello,

désolé pour la réponse tardive, Mac_jac : je n'ai pas encore testé ta correction de code, en tout cas merci infiniment pour tes lumières :up:.
MTCUBIX : Xcode ? Je ne connais pas. En fait j'ai téléchargé la cersion démo de Real Studio car dans mon entreprise on envisage de développer quelques petits utilitaires histoire d'amenuiser le côté récalcitrant de certaines tâches (...quelle belle phrase que celle que je viens d'écrire :D...). Néanmoins je n'ai jamais entendu parlé de Xcode, mais bien évidemment je vais me renseigner dessus car si c'est une solution gratuite qui offre une puissance non négligeable quand au développement d'applications et bien forcément ça m'intéresse.

A plus,

BBFUNK01

Ah , je suis juste un peu étonné

car vois-tu avec tous mac, tu reçois deux CD, Install disc 1 et Install disc 2.

dans le premier, tu as un dossier qui s'appelle XCode Tools, il pèse pas moins de 1.3 GO et contient tout ce qu'il faut pour développer sur mac
avec Xcode, il est possible de compiler du C, du C++, Objective-C, du java, des scripts sh, bash, applescript , php etc etc....

toussa pour pas un rond en plus !!!! :cool::cool:
 
Re,

certes, mais pour être franc je n'ai jamais eu à installer les cd en question : lorsque j'ai acheté mon macbook dans un magasin dont je ne citerai pas le nom (paraîtrait-il que c'est un "contrat de confiance" :D), le sel modèle dont ils disposaient était le modèle d'exposition, et comme je suis du genre impatient j'ai donc acheté leur modèle d'exposition qui par conséquent avait déjà le système d'installé. Cela dit je vais jeter un oeil aux cd en question afin de voir si Xcode peut s'avérer être une solution. Mais comme je te le disais dans le précédent message : vu que Real Basic serait potentiellement destiné à être utilisé à mon travail (donc sur un mac au boulot) je n'ai pas le souci pécunier de la chose, cela repose entièrement sur les épaules de mes employeurs.

A plus,

BBFUNK01

---------- Nouveau message ajouté à 00h54 ---------- Le message précédent a été envoyé à 00h43 ----------

Mac_Jac -> je viens de tester le code que tu m'as corrigé et ça marche effectivement au poil :up:.
Merci pour tes éclaircissements, ça m'a ouvert la voie, je vais décortiquer le code de manière approfondie car il faut que je rajoute d'autres fonctionnalités du même ordre.

Thanks a lot ;)

BBFUNK01
 
dans mon entreprise on envisage de développer quelques petits utilitaires histoire d'amenuiser le côté récalcitrant de certaines tâches
Pour ce genre de tâches, souvent des scripts suffisent : Apple Script ou script shell UNIX. Pas la peine forcement de sortir l'artillerie lourde . :D
 
Hello,

ntx -> tu as peut-être raison, j'avoue ne pas avoir suffisamment de recul pour évaluer s'il et est nécessaire d'investir dans Real Studio ou simplement utiliser Apple script pour créer les applications nécessaires dont j'aurais besoin. Mais tu peux peut-être me répondre : en fait je bosse dans une imprimerie, on utilises des flux de travail qui permettent donc d'automatiser la plupart des tâches récurrentes (imposition, anamorphose, gestion des angles de trame...etc.), l'idée ensuite est de créer pour certains clients des applications dédiées aux travaux que l'on fait pour eux. Plus clairement : pour un client on imprime environ 400 références différentes chaque mois, pour un gain de temps il est envisagé d'automatiser au maximum les tâches, le but est donc de pouvoir amalgamer ensemble les références comportant les mêmes caractéristiques, et ce de manière automatique, puis toujours automatiquement d'envoyer au rip de flashage les fichiers une fois traités (toujours automatiquement).
Du coup avec l'aide de Mac-Jac je dirais que je suis presque au bout du truc, il me reste encore à copier dynamiquement des fichiers pdf dans un dossier de l'arborescence générée puis à envoyer les fichiers textes créés dans le rip.
Après il est certain que si Apple Script permet de faire tout aussi bien... à ce moment là je pencherai pour Apple Script et Xcode, mais est-ce qu'on peut faire toutes ces choses avec ?

A plus ;),

BBFUNK01
 
Pour toutes les actions de base sur le système de fichier - comme de copies de fichiers - ou des transformations de fichiers textes - remplacement de chaines de caractères ou extraction d'informations - , de simples scripts suffisent, AS ou shell.

Mais AS sait aussi faire plein de choses sur des documents créés par des applications dites "scriptables".
 
OK, merci pour l'info, et apple script permet aussi d'avoir une boîte de dialogue du type "enregistrer le fichier dans le dossier "toto"" ?

BBFUNK01

Salut,
Je me permets d'intervenir dans ta discussion, Applescript permet de faire tout çà et tellement d'autres choses aussi, tu trouveras avec le lien ci dessous un super site sur lequel j'ai trouvé les 3/4 des infos que j'ai recherché concernant AS, car comme toi je viens de découvrir realstudio et applescript...

http://jannaud.free.fr/applescript.php

Le code que tu recherches doit être:

tell application "Finder"
choose file "Entrez un nom de fichier :"
set NomFichier to the result
open NomFichier
.....

end tell

Bon courage pour ton apprentissage...;)
 
OK, merci pour l'info, et apple script permet aussi d'avoir une boîte de dialogue du type "enregistrer le fichier dans le dossier "toto"" ?

BBFUNK01

voici l'aide Applescript avec dialog comme mot clé
Aide Applescript a dit:
display dialog
Scripting Additions: Standard Additions: User Interaction: Commandes:

La commande « display dialog » vous permet d’afficher toute une panoplie de zones de dialogue, avec de nombreuses options très utiles. La zone de dialogue peut avoir un texte d’invite, un champ de saisie de texte, jusqu’à trois boutons et offre la possibilité de choisir parmi plusieurs icônes standard.

display dialog promptString
Texte d’invite de la zone de dialogue.

buttons buttonList
Une liste de boutons.

default button
Nombre représentant le bouton par défaut.

default answer
Réponse par défaut dans le champ de saisie de texte.

with icon
Nombre représentant le numéro de l’icône.

Paramètres

promptString The text string displayed in the dialog.

buttonList string
Chaque élément de la liste est une chaîne de caractères contenant le texte qui s’affiche dans le
bouton. La première chaîne de la liste correspond à la chaîne du bouton qui se trouve le plus à gauche,
la seconde à celle du bouton suivant, et ainsi de suite. Vous pouvez
spécifier jusqu’à trois boutons. Si vous omettez le paramètre button list, la
zone de dialogue ne contient que deux boutons : Annuler et OK.

default button
Vous pouvez spécifier le bouton par défaut à l’aide d’une chaîne (celle fournie pour le
bouton dans buttonList) ou d’un entier (qui indique la position
du bouton dans la liste buttonList ; 1 indique le premier bouton en partant de la
gauche, 2 le deuxième, et ainsi de suite).

default answer string
Chaîne de caractères par défaut fournie dans le champ texte, modifiable par l’utilisateur. Si vous
omettez le paramètre de réponse par défaut, la zone de dialogue ne contient pas de
champ de texte modifiable. Si vous indiquez une chaîne vide (""), la zone de dialogue contient un
champ de texte modifiable sans réponse par défaut.

with icon
Icône à inclure dans la zone de dialogue. Il peut s’agir soit d’une chaîne
indiquant le nom d’une ressource ’ICON’, soit d’un entier indiquant
le numéro de la ressource.

Résultat

dialog reply
L’enregistrement de la réponse pour la commande "display dialog".

button returned plain text [read only]
La valeur renvoyée désignée par « plain text » est le nom du bouton choisi dans la zone de dialogue.
Cette valeur est vide si « giving up after » avait été demandé mais que le délai autorisé pour le dialogue a expiré.

text returned plain text [read only]
Renvoie le texte saisi dans la zone de dialogue. Cette valeur n’est renvoyée que si
« default answer » a été fourni comme paramètre de la zone de dialogue.

gave up boolean [read only]
Une valeur est renvoyée si le temps alloué à la zone de dialogue a expiré. Cette valeur n’est renvoyée
que si « giving up after » a été fourni comme paramètre de la zone de dialogue

Exemple :

display dialog "Enter Text, and click OK" buttons {"Don’t know",
"OK"} default button 2 default answer "Type answer:" with icon 2

:cool::cool:
 
mtcubix et CathyGYM -> merci beaucoup pour toutes ces infos ;).
De mon côté je suis toujours en train d'essayer d'améliorer mon "prototype" d'appli dans real Studio, ça prend forme et il me reste simplement à trouver comment dupliquer des fichiers .pdf d'un endroit à un autre.
En tout cas je vais me pencher sur Apple Script et essayer de faire la même appli par ce biais afi,-n de voir laquelle des 2 sera la plus performante et la plus simple à mettre en œuvre.

Merci pour les tuyaux ;).

BBFUNK01
 
Bon décidément les débuts sont difficiles dans Real Studio, j'essaie de copier un fichier.pdf d'un dossier à un autre mais sans résultat. Le point positif c'est que le code ne comporte pas d'erreur de syntaxe, néanmoins lors du test je n'obtiens pas de fichier.pdf en copie :

Dim pdfA1, pdfA2 as FolderItem
pdfA1 = SpecialFolder.Desktop.Child("EN_COURS").child("2000_2999").child("2414").child("2414_70x150").child(Art1).child("Prod_fea").child("PDF_HR").child(Art1+"pdf")
pdfA2 = SpecialFolder.Desktop.Child("EN_COURS").child("2000_2999").child("2414").child("2414_70x150").child("amalgames").child("Prod_fea").child("PDF_HR")
pdfA1.CopyFileTo pdfA2

Est-ce que quelqu'un voit une erreur ?

Merci,

BBFUNK01

---------- Nouveau message ajouté à 20h05 ---------- Le message précédent a été envoyé à 20h00 ----------

Bon... Au risque de passer pour un crétin impatient je viens de trouver la solution, et j'ai quand même honte tant la solution était... bête (faut toujours se relire avant de poster :siffle:) :
en rajoutant un point : ".pdf" au lieu de "pdf", ça marche tout de même beaucoup mieux pour identifier le fichier à dupliquer :up:.

Désolé pour cette question hâtive...

BBFUNK01