# real basic



## BBFUNK01 (3 Décembre 2010)

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" .

Merci,

BBFUNK01


----------



## Anonyme (4 Décembre 2010)

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 :

```
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*"

```
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
```


----------



## BBFUNK01 (4 Décembre 2010)

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


----------



## Anonyme (4 Décembre 2010)

BBFUNK01 a dit:


> 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.



BBFUNK01 a dit:


> 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.



BBFUNK01 a dit:


> 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/




BBFUNK01 a dit:


> 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.


----------



## BBFUNK01 (4 Décembre 2010)

Re,

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

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 , et puis tu m'as déjà considérablement aidé, donc un grand merci à toi .

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


----------



## Anonyme (4 Décembre 2010)

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 
	
	



```
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é

```
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


----------



## mtcubix (4 Décembre 2010)

BBFUNK01 a dit:


> 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.
> 
> ...



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  )


----------



## BBFUNK01 (4 Décembre 2010)

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 .
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 ...). 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


----------



## mtcubix (4 Décembre 2010)

BBFUNK01 a dit:


> 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 .
> 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 ...). 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.
> ...



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 !!!!


----------



## BBFUNK01 (5 Décembre 2010)

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" ), 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 .
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


----------



## ntx (5 Décembre 2010)

BBFUNK01 a dit:


> 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 .


----------



## BBFUNK01 (5 Décembre 2010)

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


----------



## ntx (5 Décembre 2010)

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".


----------



## BBFUNK01 (5 Décembre 2010)

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


----------



## CathyGYM (5 Décembre 2010)

BBFUNK01 a dit:


> 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...


----------



## mtcubix (5 Décembre 2010)

BBFUNK01 a dit:


> 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.
> ...


----------



## BBFUNK01 (5 Décembre 2010)

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


----------



## BBFUNK01 (5 Décembre 2010)

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 ) :
en rajoutant un point : ".pdf" au lieu de "pdf", ça marche tout de même beaucoup mieux pour identifier le fichier à dupliquer .

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

BBFUNK01


----------



## jannold2 (28 Mai 2011)

Bonjour,
un lien a été déplacé, vous pouvez trouver le tutoriel applescript ici


----------

