Skip to content

Instantly share code, notes, and snippets.

@rdm
Created July 30, 2023 18:55
Show Gist options
  • Save rdm/f1c95610175389f63e52e26e17ca211f to your computer and use it in GitHub Desktop.
Save rdm/f1c95610175389f63e52e26e17ca211f to your computer and use it in GitHub Desktop.
jqt: tab separated values file editor
NB. file editor
NB. design favors convenience over crispness
NB. (on close can restart and pick up where left off if J session remains active)
require'tables/dsv'
NB. default directory for file open
getfilename=: {{wd 'mb open1 "Select TABle file" *',y}}
NB. get/set commands
NB. cell row col - get contents of cell at row col
NB. row r - get contents of row r
NB. col c - get contents of column c
NB. table - get block data as LF delimited string
NB. optional arguments [row col] ro [row1 row2 col1 col2]
fmt=: [: }.@; {{ ' ',DEL,y,DEL=.127{a. }} each
start=: {{
wdhandler_debug=: {{
echo|:|.wdq
}}
about=. echo@'y: empty or filename or data or data;filename'
select. L. y
case. 0 do.
if. LF e. y do. DATA=: fixdsv y
else.
if. (0<#y)+.1 e. 0>nc'FNAM';'DATA' do.
if. ''-: fnam=. getfilename y do. return. end. NB. '' here means user cancelled
if. LF e. data=. fread FNAM=: fnam do. DATA=: fixdsv data
elseif. LF e. data=. fread FNAM,'.tsv' do.
FNAM=: FNAM,'.tsv'
DATA=: fixdsv data
else. echo 'no file at ',fnam return. end.
end.
end.
case. 1 do.
if. 2=#$y do. DATA=: y
elseif. 1=#y do.
data=. fread FNAM=: getfilename;y
if. LF e. data do. DATA=: fixdsv data
elseif. LF e. data=. fread FNAM,'.tsv' do.
FNAM=: FNAM,'.tsv'
DATA=: fixdsv data
end.
end.
case. 2 do.
if. (,2)-:$y do.
'data fnam'=. y
FNAM=. jpath fnam
assert. 2=#$data
DATA=: data
end.
case. do. about''return.
end.
if. 0 e. $DATA do. about''return. end.
wd DBG=:{{)n
pc table closeok;
cc dat table;
set dat minwh 640 480;
bin h;
cc add button; cn "Add row";
cc save button; cn "Save changes";
cc discard button; cn "Discard changes";
bin z;
}}
table_set DATA
}}
table_get=: {{ ({.DATA),(-1+{:$DATA)}.\<;._2 wd 'get dat table' }}
table_set=: {{
wd'set dat shape ',":_1 1+$y
wd'set dat hdr ',fmt '';{.DATA
wd'set dat type ',":400,({:$y)#0
wd'set dat data *',fmt'delete';"1}.DATA=:y
wd {{)n
set save enable 0;
set discard enable 0;
set dat block 0 _1 0 0;
set dat foreground #ff0000;
set dat block;
pshow
}}
}}
table_dat_change=: {{
changed=. -.DATA-:table_get''
filed=. 0=nc<'FNAM'
enable=. ' enable ',":changed*filed
wd 'set save',enable
wd 'set discard',enable
}}
table_dat_clicked=: {{
'r c'=.".dat_cell assert. 0=c
table_set (<<<1+r) { table_get''
}}
table_add_button=: {{ table_set '',~table_get'' }}
table_save_button=: {{
if. _1-:(table_get'') writedsv FNAM do.
wd 'mb info mb_cancel "Failed" *Could not save ',FNAM
else.
wd'set save enable 0; set discard enable 0;'
end.
}}
table_discard_button=: {{
echo 'discard'
if. _1-:data=. fread FNAM do.
wd 'mb info mb_cancel "Failed" *Could not read ',FNAM
else.
table_set fixdsv D=:data
end.
}}
start''
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment