On May 25, 2011, at 3:11 AM, Keith Clarke wrote:
A simple requirement but I'm struggling with getting the structure and syntax needed to replace only the first space character in each line of a variable with a tab.

I have a field of label-value pairs - and some of the values contain spaces. This creates problems if I attempt a blanket approach of 'replace space in tVariable' with tab.

So, I tried iterating through each tLine of tVariable but get a runtime error with 'replace space 1 in line tline with tab'. So, I'm guessing that 'space' can't be used to set chunk expression scope.

So, within each line, I'm iterating at character-level, with 'repeat for each character tChar in the line, if tChar is space then...

I've tried 'replace tChar with tab' and 'add tab after tChar' and then 'delete tChar' but I get errors - probably because I'm trying to delete the reference variable(?)

I'm sure there is a nice efficient way to do this, so any advice on structure, syntax or command usage would be greatly appreciated.

There are a few approaches  (working code below)

repeat for each line LNN in labelValueList
   put word 1 & tab & word 2 to -1 of LNN & cr after newList
end repeat
filter newList without tab  --optional for tab-only lines
filter newList without empty  --optional for 0 char lines


--- specific comments
I'm guessing that 'space' can't be used to set chunk expression scope.

The chunk expression 'word' means 'space' as well as other white space chars
  get word 3 of line 4 of fld 5

If you wanted SPACES EXCLUSIVELY, then
     set the itemDel to space
and
   put item 1 & tab & item 2 to -1 of LNN & cr after newList

You can set the itemDel and the lineDel, but not the wordDelimiter

---  syntax errors  -- specific replace
replace space 2 in line k with tab -- makes no sense to LC
replace space 2 in line k of varLines with tab -- no sense either

---------  copy working code ----
on mouseup
   put fld 1 into tempp
   repeat for each line LNN in tempp
      put word 1 to -1 of LNN into cleanLine --trim
put word 1 of cleanLine & tab & word 2 to -1 of cleanLine & cr after newList
   end repeat
   ;put newList
   --filter newList without tab  --to purge tab-only lines
-- or the following to keep tab-only lines as empty lines
   put 0 into prevNum
   repeat until the number of chars in newList is prevNum
      put the number of chars in newList into prevNum
      replace (cr & tab & cr) with ( cr & cr) in newList
   end repeat
   ;put newList
-- and purge empty if desired
   filter newList without empty
   ;put newList

end mouseup     
------- end copy code -------

Hope this helps.
Jim Ault
Las Vegas


_______________________________________________
use-livecode mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to