Loading ...
Sorry, an error occurred while loading the content.

6428Re: [Clip] Clip to create a file

Expand Messages
  • Stephen
    May 15, 2001
      Hi Marcus,
      In the library depository, there are scads and scads of clips using
      these things, and Jody has a library called DirStuff which has more
      examples than either of us could digest this year.
      Here's what I know:

      >I would like to write a clip using an input wizard which will let me
      >create a file and save it to disk using the filename input by the user.

      In your clip, simply ask for the filename. (Good idea to give a default,
      usually some variation of a date so there's a good chance of not
      overwritting pre-existing files.)
      Then use the command
      ^!Save As whatevername.whateverextension.
      this part of the clip in a long and therefore hard to read line could
      look like this:
      ^!Save As^?{What name do you want to Save this file
      as=whatevername^$GetDate(yyyymmdd)$}^?{What extension=.txt}
      [Note that when using dynamic data, the wizard prompt must come from the
      {} command and not the [] command.
      >2) I also need to collect directory paths to the NTB libraries folder,
      >and others I would let the user browse to. How best to browse and store
      >the paths for future use by the clip?

      Note Tab has an assortment of built-in functions which describe the
      libraries path, the favorites path, the documentspath and the
      applicationpath.
      In a clip you can use a parameter to (T=D) to specify a directory.
      Using the Note Tab libraries libraries folder as default, the clip line
      could look like this.
      ^!Save As ^?{(T=D)Choose a directory=^$GetLibraryPath$}

      Saving any of these variables gives you three options.
      1: Any clip variable is valid until the clipbook is closed or it is
      overwritten. That's why some people start their clips with a clear
      variables command, old variables might be called by the new clip. It
      also lets you use the values of one clip in another, similiar to a
      function call in other scripting languages.

      2: If you start a variable name with a p underline, it is stored as long
      as Note Tab is open , even if you shuffle through the variables:
      ^!Set %P_something%=TURKEYS

      3: You can save any value in the ini file. You do not even have to call
      it a variable.
      ^!Save experiments=Turkeys
      ^!Save %P_something%=TURKEYS

      In order to not clutter up the NoteTab.ini, you might use a command to
      store the values in special ini file:

      ^!SetIniFile experimental.ini

      To acces any values saved there, use this command:
      ^!GetValue experimental


      I spent some time re-creating the wheel in a couple of clips. I had
      used most of these commands before, but not all of them together, and
      not with a clip library file as default, so I came up with these two
      clips to demo the commands (If you use them, watch for lines that have
      been word wrapped by our ever-lovin applications):

      H="Addresses Database"
      ^!ClearVariable %output%
      ^!Set %savepath%=^?{(T=D)What directory do you wish to save this
      document in?=^$GetLibraryPath$}; %savename%=^?{What do you wish to call
      this file=addresses}; %saveext%=^?{What extension do you wish to save it
      as=.clb}; %append%=^?{If this file already exists, what do you wish to
      do?=_Append this file to the previous one^=append|Overwrite the previous
      file^=overwrite}; %ini%=^?{Save this in the addresses.ini?==Yes|_No};
      %about%=^?{(T=W)About This Clip=This clip will create a simple address
      and phone number database. ^PBy default, it adds the value you enter
      into a unique clip library, but you may append the values to any library
      you wish. ^PYou also have the option of storing these values in the
      addresses.ini file. }
      :startworking
      ^!If ^$GetFileDate(^%savepath%^%savename%^%saveext%)$<1 NEXT ELSE SKIP
      ^!Set %append%=overwrite
      ^!IfSame ^%append% overwrite NEXT ELSE SKIP
      ^!Append %output%="= V5 MultiLine TabWidth=30^%NL%"
      ^!SetIniFile ^$GetAppPath$addresses.ini
      :namesloop
      ^!Set %name%=^?{What is the person's name?=John Doe}; %street%=^?{What
      is their street address=123 Some Street}; %city%=^?{What is their
      city?=anytown}; %state%=^?{What state do they live in?=noplace};
      %zip%=^?{If in USA, what is their zip?=}; %country%=^?{What is their
      country?=nowhere}; %phone%=^?{What is their phone number?};
      %email%=^?{What is their email address?}; %web%=^?{What is their
      web-site URL?}; %more%=^?{Are there more addresses to add==Yes|_NO}
      ^!Append %output%="^%NL%^%NL%H="^%name%"^%NL%"
      ^!Append
      %output%=^%name%^%NL%^%street%^%NL%^%city%^%SPACE%^%state%^%SPACE%^%SPACE%^%zip%^%NL%^%NL%
      ^!Append
      %output%=^%NL%^%TAB%^%phone%^%NL%^%TAB%^%email%^%NL%^%TAB%^%web%^%NL%^%NL%
      ^!IfSame ^%ini% YES NEXT ELSE endini
      ^!SaveValue Addresses:^%name%=^%street%,^%city%, ^%state% ^%zip%
      ^%country%
      ^!SaveValue Emails:^%name%=^%email%
      ^!SaveValue PhoneNumbers:^%name%=^%phone%
      ^!SaveValue HomePages:^%name%=^%web%
      ^!Set %allnames%=^%name%|^$GetValue("Names:List")$
      ^!SaveValue Names:List=^$StrSort("^%allnames%";TRUE;TRUE;TRUE)$
      :endini
      ^!IfSame ^%more% Yes namesloop ELSE NEXT
      ^!IfSame ^%append% overwrite NEXT ELSE SKIP
      ^!DeleteFile "^%savepath%^%savename%^%saveext%"
      ; I'm not using the ^!Save As command because it is not really needed.
      ^!AppendToFile "^%savepath%^%savename%^%saveext%" ^%output%
      ; Reset back to the original Ini file
      ^!SetIniFile


      H="Get Addresses Ini Values"
      ^!SetIniFile ^$GetAppPath$addresses.ini
      ^!SetListDelimiter |
      ^!Set %who%=^?{(T=A)Choose whose data you wish to
      retrieve=^$GetValue("Names:List")$}; %data%=^?{(T=A)What data do you
      wish to retrieve=Addresses|_PhoneNumbers|Emails|HomePages}
      ^!SetArray %who%=^%who%
      ^!SetArray %data%=^%data%
      ^!Set %output%=^%EMPTY%; %i%=1; %inneri%=1
      :outloop
      ^!Set %nowwho%=^%who^%i%%
      ^!Append %output%=^%who^%i%%^%NL%
      :inloop
      ^!Append %output%=^$GetValue("^%data^%inneri%%:^%nowwho%")$^%NL%
      ^!Inc %inneri%
      ^!If ^%inneri%>^%data0% NEXT ELSE inloop
      ^!Set %inneri%=1
      ^!Inc %i%
      ^!If ^%i%>^%who0% NEXT ELSE outloop
      ^%output%




      Hope this helps, and is not too much detail or anything, but it was lots
      of fun.
      Stephen
    • Show all 5 messages in this topic