Created
July 30, 2023 18:55
-
-
Save rdm/f1c95610175389f63e52e26e17ca211f to your computer and use it in GitHub Desktop.
jqt: tab separated values file editor
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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