Saw your message come in and have just been noodling around with the idea of
reversing only the odd pages. Does the following help?
flipOddPages=:verb define
'comb png' flipOddPages y
:
NB.y=directory to scan, x=file prefix and suffix
'pfx sfx'=.2 {. (;:^:(0=L.) x),<'png'
dir =. (,'\'-.{:)y
NB. Scan directory
fn =. {. |: 1!:0 jpath dir,prefix,'*',suffix
NB. Zero-fill here will convert comb.png to comb 0.png
NB. The increments account for the space after comb and
NB. the dot before png respectively.
pn=.0 ".&> (1+#pfx) }.&.> (-1+#sfx)}.&.> fn
NB. Reverse order of odds
pn=.(+ 2&| * #-+:) pn
NB. Table of old-filename, new-filename
fn ,. <@;"1 (<pfx,' '),.(":&.> pn),.<'.',sfx
)
Here, if you had a subdirectory in your J temp folder named 'archive1', with
10 files in it ('comb.png' plus 'comb 1.png' through 'comb 9.png'), you'd
call it like this:
flipOddPages '~temp\archive1'
+----------+----------+
|comb 1.png|comb 9.png|
+----------+----------+
|comb 2.png|comb 2.png|
+----------+----------+
|comb 3.png|comb 7.png|
+----------+----------+
|comb 4.png|comb 4.png|
+----------+----------+
|comb 5.png|comb 5.png|
+----------+----------+
|comb 6.png|comb 6.png|
+----------+----------+
|comb 7.png|comb 3.png|
+----------+----------+
|comb 8.png|comb 8.png|
+----------+----------+
|comb 9.png|comb 1.png|
+----------+----------+
|comb.png |comb 0.png|
+----------+----------+
The resulting table is a mapping of original filenames to corrected
filenames, where the order of the odd pages has been reversed (and the first
page has been made consistent by adding an index, 0). Actually renaming the
files is left as an exercise for the reader (but isn't difficult).
While packaging this up for re-use, I noticed it had a very familiar
structure.
read filenames
parse filenames (drop pfx+' ', sfx+'.')
multiply page number by two
subtract count
residue page number by two
format filenames (tack pfx+' ',sfx+'.')
write filenames
Now, I don't think it'd be worthwhile to rewrite the verb using under,
especially since it's got side-effects and the central &. is a bit iffy, but
I thought it interesting nonetheless.
(Or maybe if one spends too much time with J, he begins to see unders
everywhere :)
-Dan
-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Brian Schott
Sent: Saturday, December 14, 2013 10:00 AM
To: Chat forum
Subject: [Jchat] Fwd: Archive j
I have been studying ways to digitally archive old paper reports using a
one-sided scanner with an automatic paperfeed. Two options have occurred to
me.
One. Scan to a single PDF file,
Two. Scan to a folder containing multiple PNG files.
The options are very similar except that the PDF mode seems to take
considerably more disk space.
Both methods suffer slightly when the original documents are two-sided
because either the pages are out of order (in the PDF) or the numbering of
the individual files in the folder is out of order.
I would like to implement a routine for the second option that would rename
the multiple PNG files. So I have developed some simple J verbs to create
the indexes of the filenames, but I do not know how to associate those
results with the original files and rename the original files correctly in
the case of two-sided originals.That is where I would like some help
especially in knowing what part of the task can be done in J and what part
is done in unix batch files.
Notice in the "typical" example below of four pages that the pages of the
second side are in the reverse of the correct order and that the very first
page does not have a number associated with it.
server:Documents brian$ ls -l combined\ not total 872
-rw-r--r-- 1 brian staff 88517 Dec 14 09:13 combined 1.png
-rw-r--r-- 1 brian staff 119690 Dec 14 09:13 combined 2.png
-rw-r--r-- 1 brian staff 129123 Dec 14 09:13 combined 3.png
-rw-r--r-- 1 brian staff 100494 Dec 14 09:13 combined.png
server:Documents brian$ ls -l combined.pdf -rw-r--r--@ 1 brian staff
971300 Dec 12 08:22 combined.pdf
Below are the J verbs for creating indexes based on the number of files in a
directory.
nodd=: >.@-:
neven=: <.@-:
odd=: >:@+:@i.@nodd
even=: 2+|.@:+:@i.@neven
zero=: '0'&,@":"0
Note 'some test cases'
<@:even"0] 0 1 2 3 4
<@:odd"0] 0 1 2 3 4
zero odd 4
zero even 3
zero even 0
1&|. zero (odd,even) 4 NB. this would be most like
NB. a production case because it would
NB. match the order of the file list in the original ls
)
Thanks,
---
(B=)
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm