Solved

Handling Null Array Locations in a Loop

Posted on 2002-03-06
9
147 Views
Last Modified: 2013-12-24
Hi,

I am writing an online reservation system. I have catagorys of rooms, then individual blocks of rooms in them. To show preferance, to sea front over other catered rooms, you would select a number for the catagory of room, then for the blocks assing a perferance (all down with drop down lists).

im creating a 2D array from this data, then running through it to write out a list of prefered accomodation.

The drop down lists have values that i use as the array index, but as not all catagorys and blocks need a preferance assinged i need a way of skiping over null values.

Is there a simple if(array[x][y].isNull) method? Any other ideas?

Thanks, GR.
0
Comment
Question by:googlyralph
  • 4
  • 4
9 Comments
 
LVL 19

Expert Comment

by:cheekycj
ID: 6844581
something like

<cfif LEN(TRIM(myArrayVariable[x][y])) EQ 0>
  <!--- handle null --->
<cfelse>
  <!--- handle not null --->
</cfif>

Assuming your data is strings.

CF has the nice capability of being typeless so everthing can be seen as a string.

CJ
0
 
LVL 1

Author Comment

by:googlyralph
ID: 6846871
Nope, that doesn work, still get an error. The code im using to "squash" the array out is:

  temp = ArrayNew(1);
  for(x = ArrayLen(accomOrder); x gt 1; x = x - 1){
    temp = accomOrder[x];
    if(len(trim(temp[1])) eq 0){
       ArrayDeleteAt(accomOrder, x);
       continue;
    }
    for(y = ArrayLen(temp); y gt 1; y = y - 1){
       if(len(temp[y]) lt 1){
          ArrayDeleteAt(accomOrder[x], y);
       }
    }
  }


What (i think) its doing:
geting a copy of a 1d array representing a single row in the "table" im making, if the first value is null, then delete the row and run the loop again.
if it gets to a row where the first location is not null, then move along it from right to left, deleting locations in the original 2d array that are null.

Anyone see anything wrong with this code? Any more sugestions?

Cheers, GR.
0
 
LVL 1

Author Comment

by:googlyralph
ID: 6846876
This is the error:

The element at position 1 in dimension 1 of object "temp" cannot be found. That dimension of the object is empty. Please, modify the index expression.


The error occurred while processing an element with a general identifier of (CFSCRIPT), occupying document position (1:1) to (1:10) in the template file e:\tempwebroot\current\test\hallselectconfirm\execute.cfm.
0
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 
LVL 19

Expert Comment

by:cheekycj
ID: 6847822
Have you tried it without using a temp array?

for(x = ArrayLen(accomOrder); x gt 1; x = x - 1){
   if(len(trim(accomOrder[x])) eq 0){
      ArrayDeleteAt(accomOrder, x);
      continue;
   }
   for(y = ArrayLen(accomOrder[x]); y gt 1; y = y - 1){
      if(len(accomOrder[x][y]) lt 1){
         ArrayDeleteAt(accomOrder[x], y);
      }
   }
 }
0
 
LVL 19

Accepted Solution

by:
cheekycj earned 50 total points
ID: 6855163
any luck?
0
 
LVL 2

Expert Comment

by:Cyril_H
ID: 6856065
Just a question, could you Output the content of your Array with CF_OBJECTDUMP ? If yes, i think that cheekycj's solution should work... if not, maybe some part of your Array are not defined at all !! Then you have to resolve your problem when you create the Array, not when the Array is created !

Could you display the content of your Array ?

Cyril
0
 
LVL 1

Author Comment

by:googlyralph
ID: 6941393
I have found an alternative to using htis template now, so i am not overly concerned why this doesnt work. I will assign the points to Cheekyci for the time and effort.

Thanks, GR.
0
 
LVL 19

Expert Comment

by:cheekycj
ID: 6942225
thanx for the pts.  Glad you got it working, would you care to post your solution for future reference?

Thanx,
CJ
0
 
LVL 1

Author Comment

by:googlyralph
ID: 6942241
Not really relevent, took an alternative route, and used client side validation instead.

Thanks for your help.

GR.
0

Featured Post

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

When it comes to showing a 404 error page to your visitors, you do not want that generic page to show, and you especially do not want your hosting provider’s ad error page to show either. In this article, I will show you how to enable the custom 40…
Lease-to-own eliminates the expenditure of hardware replacement and allows you to pay off the server over time. Usually, this is much cheaper than leasing servers. Think of lease-to-own as credit without interest.
Microsoft Active Directory, the widely used IT infrastructure, is known for its high risk of credential theft. The best way to test your Active Directory’s vulnerabilities to pass-the-ticket, pass-the-hash, privilege escalation, and malware attacks …
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…

830 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question