mIRC Home    About    Download    Register    News    Help

Print Thread
How to handle $null values? #138574 03/01/06 08:47 AM
Joined: Aug 2004
Posts: 7,252
R
RusselB Offline OP
Hoopy frood
OP Offline
Hoopy frood
R
Joined: Aug 2004
Posts: 7,252
I have a fair size text file (265 lines at present), which was generated by saving a spreadsheet in a comma delimited text file format (hope I got the phrasing correct, or at least understandable).

Ideally, each line would have 10 items in it, however, some of them don't and using $numtok(<line>,44) is returning either 8, 9 or 10 items

Here's an example of the format of the lines in the text file. First one has items missing (generating a count of 8, when using $numtok). Second one has everything in place. I think that the easiest way to handle this would be to put in something for dummy data where it's currently returning $null (and therefore not counting the number of tokens correctly)
Quote:
rte,address,street,ST,N,,name,account,,MTWHFS

rte,address,street,RD,S,apt,name,account,mm/dd/yyyy,MTWHFS
Any suggestions as to a way that I can insert dummy data between double commas, without having to go through each line manually?

There are up to three possible locations where the $null value might be getting returned...for lack of a better way of describing them, in reference to the second item in the quote, the possibilities would be at tokens numbered 5, 6 &/or 9...the rest of the locations have guaranteed entries. I know that if $numtok returns 10, then none of the three locations needs dummy data, and if it returns 7 then all three locations need the dummy data, but if it returns 8 then only 2 of the three locations need the dummy data, and if it returns 9, then one of the three needs the dummy data.

I don't know how to determine (aside from visually inspecting the line), which location(s) needs the dummy data.

Re: How to handle $null values? #138575 03/01/06 10:57 AM
Joined: Sep 2003
Posts: 4,230
D
DaveC Offline
Hoopy frood
Offline
Hoopy frood
D
Joined: Sep 2003
Posts: 4,230
Assume %data holds the line

This well replace ,, with , , giving you a space as your dummy data %data = $replacex(%data,$+($chr(44),$chr(44)),$chr(44) $chr(44))

However might have some probs if the two $#null fields are next to each other, so i suggest the same function embeeded inside itself 3 times...

%data = $replacex([color:red]$replacex([color:orange]$replacex(%data,$+($chr(44),$chr(44)),$chr(44) $chr(44)),$+($chr(44),$chr(44)),$chr(44) $chr(44))[/color],$+($chr(44),$chr(44)),$chr(44) $chr(44))[/color]

Re: How to handle $null values? #138576 03/01/06 11:52 AM
Joined: Mar 2005
Posts: 212
N
NeUtRoN_StaR Offline
Fjord artisan
Offline
Fjord artisan
N
Joined: Mar 2005
Posts: 212
how did you come to the conclusion that 3 times would do the job?
dont get me wrong; it works i just want to know how you figured that out, if you wouldnt mind sharing

Re: How to handle $null values? #138577 03/01/06 04:24 PM
Joined: Nov 2005
Posts: 11
S
sparkicks Offline
Pikka bird
Offline
Pikka bird
S
Joined: Nov 2005
Posts: 11
i would assume that since space also acts like a sperator so you need 2 on either side and the one in the middle it must assume is an actual entry anything between the both would do so i would say anything above 3 would work

Re: How to handle $null values? #138578 03/01/06 07:17 PM
Joined: Dec 2002
Posts: 1,245
M
MikeChat Offline
Hoopy frood
Offline
Hoopy frood
M
Joined: Dec 2002
Posts: 1,245
Quote:
Any suggestions as to a way that I can insert dummy data between double commas, without having to go through each line manually?

.
if the data originates from your dialog, can you have the fields fill in with default false data, such as all xxx

name xxxx
address xxxx
phone xxxx
route xxx
date dd/mm/yyyy
so on

Re: How to handle $null values? #138579 03/01/06 11:09 PM
Joined: Aug 2004
Posts: 7,252
R
RusselB Offline OP
Hoopy frood
OP Offline
Hoopy frood
R
Joined: Aug 2004
Posts: 7,252
Actually, Mike, the data isn't originating from the dialog, but will be used as the base information for the dialog. It was easier & faster to scan the information from a printout using an OCR, then save it all into one text file, using commas to separate the data on each line (couldn't use spaces, as some of the data contains spaces), rather than run my dialog and have to enter each item one at a time. Thanks for all your help.

Re: How to handle $null values? #138580 04/01/06 07:38 AM
Joined: Sep 2003
Posts: 4,230
D
DaveC Offline
Hoopy frood
Offline
Hoopy frood
D
Joined: Sep 2003
Posts: 4,230
Quote:
how did you come to the conclusion that 3 times would do the job?
dont get me wrong; it works i just want to know how you figured that out, if you wouldnt mind sharing


RusselB said:
"I know that if $numtok returns 10, then none of the three locations needs dummy data", he also stated this was the max that would be missing."

---

I well however say that after reviewing the logic of it, I could have got away with using only 2.

The worst case would be 3 in a row x,,,,y resulting in pass 1 x,dummy,,dummy,y and pass 2 x,dummy,dummy,dummy,y (dummy representing space here)

I also should not have embedded the identifier as i did, this was due to forgetting repeaditive replace arguements can be passed

A faster command would likely be...
%data = $replace(%data,$+($chr(44),$chr(44)),$chr(44) $chr(44),$+($chr(44),$chr(44)),$chr(44) $chr(44))

Re: How to handle $null values? #138581 22/06/06 12:09 AM
Joined: Aug 2004
Posts: 7,252
R
RusselB Offline OP
Hoopy frood
OP Offline
Hoopy frood
R
Joined: Aug 2004
Posts: 7,252
Sorry for bring up an older topic. After testing the last code you suggested, DaveC, intermixed with code of my own, giving the following
Code:
 alias line.correct {
  var %file = $findfile(c:\,Observer 2.csv,1), %a = 1, %b = $lines(%file)
  while %a &lt;= %b {
    var %data = $read(%file,nt,%a)
    if $numtok(%data,44) &lt; 11 {
      %data = $replace(%data,$+($chr(44),$chr(44)),$chr(44) $chr(44),$+($chr(44),$chr(44)),$chr(44) $chr(44)) 
    }
    .write -l $+ %a %file %data
    inc %a
  }
  echo -a Complete
}
 

and then checking the lines manually, I found that the replacements are not being written. Now I admit this may be a problem with the /write command, rather than the usage of the $replace, but I don't think so.

Any suggestions/recommendations?

Re: How to handle $null values? #138582 22/06/06 12:20 AM
Joined: Jan 2003
Posts: 2,523
Q
qwerty Offline
Hoopy frood
Offline
Hoopy frood
Q
Joined: Jan 2003
Posts: 2,523
The filename contains spaces, so it needs to be enclosed in quotes:

var %file = $qt($findfile(c:\,Observer 2.csv,1))

Oh and don't forget to delete the file "Observer", created in the directory containing "Observer 2.csv" wink

Or if for example the directory is "c:\program files\something\", you should look for the file "program" in c:\. You get the idea.

Last edited by qwerty; 22/06/06 12:24 AM.
Re: How to handle $null values? #138583 22/06/06 01:16 AM
Joined: Aug 2004
Posts: 7,252
R
RusselB Offline OP
Hoopy frood
OP Offline
Hoopy frood
R
Joined: Aug 2004
Posts: 7,252
Thanks. That solved that problem.