View Single Post
  #2   Report Post  
Posted to microsoft.public.excel.programming
Bernie Deitrick[_2_] Bernie Deitrick[_2_] is offline
external usenet poster
 
Posts: 176
Default Function to extract element of a complex delimited string (Pick D3 database)

John,

You can find ASCII characters using formulas by typing

=FIND("

then holding down the alt key and by using the numeric keypad,
entering, for example 0254

then using a closing " and finishing the formula in the usual manner

So, to extract the left part of string up to the first 0254, you would
use

=LEFT(A1,Find(" enter 0254 using the numeric keypad while holding
down alt ",A1)-1)

HTH,
Bernie
MS Excel MVP

"John Vinciguerra (Chemform)"
wrote in message
u...
Hi Excel Gurus,

I have tried doing a google search for something similar to this but

had no
luck,
I wonder if you guys/gals could help?

Is there a function (or how would I write a user function) to do the
following.

Assuming I have a text string in a cell delimited as such:


PRODUCT1.CODE-PRODUCT1.NAME-PRODUCT1.COST*PRODUCT2.CODE-PRODUCT2.NAME-
PRODUC
T2.PRICE
(1,1) - (1,2) - (1,3) * (2,1) -

(2,2) -
(2,3)

* Represents ASCII Char. 254
- Represents ASCII Char. 253

Is it possible to extract 1 of these string elements into another

cell in a
manner
similar to this:

=EXTRACT(COL,ROW,1,1) to yield PRODUCT1.CODE from the string

=EXTRACT(COL,ROW,2,3) to yield PRODUCT2.PRICE from the string

I have tried using the FIND() and MID() functions but I think I'm on

the
wrong track.

Why do I want to do this? :
I have a Pick/D3 database which uses a 3 dimensional record

structure. It is
accessed by a terminal emulator which provides some pick programs

and excel
modules that allow communication with excel via DDE. The excel

functions
take
the form =pickread("FILENAME","KEY.ID", ATTRIBUTE,VALUE,SUB-VALUE)

in the
string
above PRODUCT1.NAME would be in ATTRIBUTE 1 and VALUE 2 (sub-value

is not
used in
this example).

I have a spreadsheet that does between 600 and 1200 of these

pickread()
functions
which can be very slow if the pick server is under a heavy a load. I

would
like to
be able to do one pickread() and return a large delimited record and

split
it
up in excel. I realise that this may be a slow task, however nowhere

near as
slow
as doing a DDE database read for 1200 cells.

In the ideal world I would like to be able to work with three

delimiters,
ASCII chars
252(Sub-Value Mark), 253(Value Mark) and 254(Attribute Mark) so the

function
above would
look more like =EXTRACT(COL,ROW,1,2,3) where COL,ROW is the cell

that the
large delimited
string is stored in, 1 is the Attribute, 2 is the Value, 3 is the

Sub-Value.


I hope this makes sense.


Any help greatly appreciated.


Regards,

John Vinciguerra