Do you want equivalence or equality?

   eq=: -:!.0
   'G' eq ,'G'
0
   'G' = ,'G'
1


On Wed, Mar 28, 2012 at 6:59 PM, Henry Rich <henryhr...@nc.rr.com> wrote:
> In the file version the contents of the boxes are lists, even when they
> have only one character.  The boxes you are comparing against better
> match that.  try
>
>     select. c
>        case. , L:0 'N';'A';'Q';'GS';'G';'GM';'S';'Qsc';'AUS' do.
>
> Henry Rich
>
> On 3/28/2012 5:44 PM, PackRat wrote:
>> I am trying to compare values in a column of CSV data loaded from a
>> file against a set of selected values in order to choose records with
>> matching values to be set aside for writing into another file.  Easy
>> task, I thought.
>>
>> However, the first problem I ran into was that there must be things
>> about the "select" control structure that are not described anywhere,
>> because, for use in matching literals, it would not work, no matter
>> what I tried.  So I decided to use the "if" control structure as a
>> substitute for the "select" control structure.  And that's when I found
>> that literal comparison expressions didn't necessarily work the way I
>> intuitively thought.
>>
>> That second problem was that I forgot that one cannot use "=" as a
>> Boolean comparison verb for literals (except for single characters).
>> So I had to look up Dan Bron's and Roger Hui's comparison verbs for any
>> kind of matching.  For "=", I used Roger's verb:
>>
>>     eq=: -:!.0
>>
>> However, that's when I discovered my third problem: I could get my
>> series of "if" comparisons to work perfectly for data I created
>> manually, but they would NOT work correctly for data in a loaded file
>> which LOOKS identical.
>>
>> Here are two examples, the first with data from a loaded file, the
>> second with data I created to look just like the loaded data (sorry
>> about the possibly crazy-looking wraparounds in email):
>>
>> ####################################################################
>>     a=. readcsv (root,datafile1)
>>     h=. 32
>>     h{a
>> +----+-+-----------------------------+---+-+++---+----------+----+-+----
>> -----------------------------------------------------------------------
>> +
>> |SMLC|G|012 Smile.Communications
>> Ltd.|tlw|x|||ISR|10/31/2007|1040|S|Provides various telecomm broadband,
>> roaming and traditional voice services|
>> +----+-+-----------------------------+---+-+++---+----------+----+-+----
>> -----------------------------------------------------------------------
>> +
>>     datatype h{a
>> boxed
>>
>>     ]b=. ((0 1 2){h{a),'0';((8 9){h{a)
>> +----+-+-----------------------------+-+----------+----+
>> |SMLC|G|012 Smile.Communications Ltd.|0|10/31/2007|1040|
>> +----+-+-----------------------------+-+----------+----+
>>     datatype b
>> boxed
>>
>>     ]c=.>  1{b
>> G
>>     datatype c
>> literal
>>
>>     ('G' eq c)
>> 0
>> ####################################################################
>>     ]b3=. 'SMLC';'G';'012 Smile.Communications
>> Ltd.';'0';'10/31/2007';'1040'
>> +----+-+-----------------------------+-+----------+----+
>> |SMLC|G|012 Smile.Communications Ltd.|0|10/31/2007|1040|
>> +----+-+-----------------------------+-+----------+----+
>>     datatype b3
>> boxed
>>
>>     ]c3=.>  1{b3
>> G
>>     datatype c3
>> literal
>>
>>     ('G' eq c3)
>> 1
>> ####################################################################
>>
>> As you can see, the type of expression ('G' eq c) that I use in my
>> series of "if" comparisons worked correctly when I manually created the
>> original row containing boxed data (second example above).  However, as
>> you can also see, that same expression did NOT work correctly in the
>> first example, where the original row containing boxed data came from a
>> loaded file.
>>
>> My questions:  Why does this happen?  How do I need to code things so
>> that the data comparisons work correctly?
>>
>> The above was working with the "if" control structure, which created a
>> lengthy list of comparisons with identical "do" actions.  How do I have
>> to code the "select" structure to make it work correctly, as above?  I
>> was trying to do something like the following:
>>
>>     select. c
>>        case. 'N';'A';'Q';'GS';'G';'GM';'S';'Qsc';'AUS' do.
>>           found=. found , b
>>     end.
>>
>> As I said, I thought this short, little project was going to be easy,
>> but there
>> must be something about J's loaded files that I don't understand at
>> all.  Help
>> and explanations would be greatly appreciated! Thanks in advance!
>>
>>
>> Harvey
>>
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm



-- 
Devon McCormick, CFA
^me^ at acm.
org is my
preferred e-mail
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to