Friday, May 02, 2008

Quick VFP Developer Shortcut: Tables into clipboards

Developers create a lot of little "snippets" that help them in a lot of different scenarios. Some of them evolve into larger tools; others turn into hidden gems that get shared among a small select few.

(hmmm....SET TANGENT ON ....sounds like an interesting idea for a VFPX project - a snippet sharer - damn! don't they have that in VS? - I DIDN'T think of that when I was first writing this - why can't I think of something that VS DOESN'T have? - OK - SET TANGENT OFF - I do think we DO need an IntellisenseX manager that allows others to post useful Intellisense snippets)

However, here's something I had to quickly build today and others likely have other ways of doing this but....

Problem: I wanted to quickly take the content of a small query subset table and dump it into a document (text) for easily review. (no, not everyone deals with XML)

Update: YES -> you COULD do all the silly code I have down below here but Steve Black, guardian of all cool hidden things in VFP, reminded me of :

_VFP.Datatoclip()

In my efforts at least, a VERY underused feature that would have saved me a bunch of time today (ok, so maybe only the 2 minutes it took to write the stuff below, but still)

Original Post:

While I could certainly say

CURSORTOXML () and then be done with it - I wanted it to be a little more readable.

** Function to copy current alias to a clipboard using tabs
lc = ""
    FOR lni = 1 TO FCOUNT()
        lc = lc + TRANSFORM(FIELD(lni))+"    "
    ENDFOR
    lc = lc+CHR(13)
SCAN
    FOR lni = 1 TO FCOUNT()
        lc = lc + TRANSFORM(EVALUATE(FIELD(lni)))+"    "
    ENDFOR
    lc = lc+CHR(13)

ENDSCAN
_CLIPTEXT = lc

Of course, you could further enhance this more for HTML purposes:

lc = "<table><tr>"
    FOR lni = 1 TO FCOUNT()
        lc = lc + "<th>TRANSFORM(FIELD(lni))+"</th>"
    ENDFOR
    lc = lc+"</tr>"
SCAN
    lc = lc + "<tr>"
    FOR lni = 1 TO FCOUNT()
        lc = lc + "<td>"+TRANSFORM(EVALUATE(FIELD(lni)))+"</td>"
    ENDFOR
    lc = lc+"</tr>"

ENDSCAN
lc = lc + "</table>"

_CLIPTEXT = lc

(hint: you can past raw HTML into things like Word and Excel and it's automatically formatted)

Yes, I know this isn't elegant but it worked exceptionally well for what I needed.

I would run a quick query on some data, run this function and then just paste it.

Quick and Dirty - just when you need it.  

4 comments:

Steven Black said...

Don't forget _vfp.DataToClip().

Andrew MacNeill said...

Doh! argh! (smash boom bang)

See - I KNEW there was an easier way - it just needs to be made more visible

Thanks Steve!

Tamar E. Granor said...

Just want to point out the Toolbox is a great place to store stuff like this.

Andrew MacNeill said...

Great point, Tamar - I had also forgotten about that. I've been trying to use the Toolbox more often but keep on forgetting - but that's a great use for it.