Advertisement
Guest User

inka ListWrangler

a guest
Sep 23rd, 2014
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.27 KB | None | 0 0
  1. <html><head><meta charset="utf-8">
  2. <title>LIST WRANGLER: sort -=- merge and de-duplicate -=- find unique lines</title>
  3. <style>*{font-size:11px}textarea{background-color:#bbb;height:98%;width:98%}</style>
  4. </head><body><div><!-- usage instructions? naw! --><hr>
  5. <div style="float:left;width:32%;height:64%">
  6. <input type="button" id="but1" value="sort list A" onclick="sorta()"/>
  7. will trim() then cull any duplicate or empty lines
  8. <br/><textarea id="mybox1"></textarea>
  9. </div><div style="float:left;width:32%;height:64%">
  10. <input type="button" id="but2c" value="A vs B: find common lines" onclick="comm2()"/>
  11. <input type="button" id="but2d"value="A vs B: find different (unique) lines" onclick="diff2()"/>
  12. <br/><textarea id="mybox2"></textarea>
  13. </div><div style="float:left;width:32%;height:64%"><span id="tell3"></span><br/>
  14. <textarea id="mybox3" disabled>output displays here</textarea></div>
  15. <div id="sidez" style="width:100%;height:100%;visibility:hidden"><br/>
  16. <div style="float:left;width:48%;height:32%;margin-top:8px">
  17. ------ lines unique to list A ------<br><textarea id="tha"></textarea></div>
  18. <div style="float:left;width:48%;height:32%;margin-top:8px">
  19. ------ lines unique to list B ------<br><textarea id="thb"></textarea></div></div>
  20. <script>box1 = document.getElementById("mybox1");
  21. box2 = document.getElementById("mybox2");
  22. box3 = document.getElementById("mybox3");
  23. bt1 = document.getElementById("but1");
  24. bt2c = document.getElementById("but2c");
  25. bt2d = document.getElementById("but2d");
  26. btxt3 = document.getElementById("tell3");
  27. var wantsep = false;
  28. dside = document.getElementById("sidez");
  29. dog1 = document.getElementById("tha");
  30. dog2 = document.getElementById("thb");
  31. function nixDupes(bob) {
  32. var i, hoo=bob.length, blip, uneeks=[];
  33. for (i = 0;i<hoo;i++){
  34. blip = bob[i].trim();
  35. if (uneeks.indexOf(blip) == -1 && blip.length >=1)uneeks.push(blip);
  36. }
  37. return uneeks;
  38. }
  39. function sorta(){
  40. // design decision ~~ don't disturb sidebyside divs visibility here.
  41. // ( I often want to paste earlier output and edit/sort it again )
  42. sift1 = box1.value;
  43. if (sift1.trim() == ""){alert('box for List A is empty !');return true;}
  44. sift1 = sift1.split("\n");
  45. if (sift1.length>49999) alert('click OK... and be patient!');
  46. // ------ tested: list with 102k lines (4.3Mb) ~= 4 seconds
  47. sift1 = nixDupes(sift1);
  48. sift1 = sift1.sort();
  49. btxt3.innerHTML = "displaying sorted List A contents";
  50. box3.disabled = false;
  51. box3.value = sift1.join('\n');
  52. }
  53. function comm2(){
  54. var i, j, sect = [];
  55. dside.style.visibility ="hidden";
  56. sift1 = box1.value;
  57. if (sift1.trim() == ""){alert('box1 (List A) is empty !');return true;}
  58. sift2 = box2.value;
  59. if (sift2.trim() == ""){alert('box2 (List B) is empty !');return true;}
  60. box3.disabled = false;
  61. sift1 = sift1.split("\n");
  62. sift2 = sift2.split("\n");
  63. if ((sift1.length + sift2.length) > 19999) alert('click OK... and be patient!');
  64. // ------ tested: 2 lists (102k lines, 4.3Mb each) ~= 14 seconds
  65. // yes, an Array.prototype iterator function would be more efficient...
  66. // developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array
  67. sift1 = nixDupes(sift1);
  68. sift2 = nixDupes(sift2);
  69. for (i in sift1) {
  70. for (j in sift2)
  71. if (sift1[i] == sift2[j]) sect.push(sift1[i]);
  72. }
  73. if (!sect.length){box3.value="---none---";btxt3.innerHTML='';return true;}
  74. sect = sect.sort();
  75. btxt3.innerHTML = "AvsB ~~ merged list: lines common to A and B";
  76. box3.value = sect.join('\n');
  77. }
  78. function diff2(){
  79. var i, k, m, tmp1 = [], tmp2 = [], neeks = [];
  80. sift1 = box1.value;
  81. if (sift1.trim() == ""){alert('box1 (List A) is empty !');return true;}
  82. sift2 = box2.value;
  83. if (sift2.trim() == ""){alert('box2 (List B) is empty !');return true;}
  84. box3.disabled = false;
  85. wantsep = confirm('Display separate sets of unique A/B lines, side-by-side?');
  86. sift1 = sift1.split("\n");
  87. sift2 = sift2.split("\n");
  88. if ((sift1.length + sift2.length) > 29999) alert('click OK... and be patient!');
  89. // ------ tested: 2 lists (102k lines, 4.3Mb each) ~= 9 seconds
  90. sift1 = nixDupes(sift1);
  91. sift2 = nixDupes(sift2);
  92. k = sift1.length;
  93. m = sift2.length;
  94. for (i=0;i< k; i++)
  95. if (sift2.indexOf(sift1[i]) == -1){tmp1.push(sift1[i]);}
  96. for (i=0;i< m; i++)
  97. if (sift1.indexOf(sift2[i]) == -1){tmp2.push(sift2[i]);}
  98. if(tmp1.length==0 && tmp2.length==0){box3.value="---none---";btxt3.value='';return true;}
  99. if(wantsep === true){
  100. dside.style.visibility ="visible";
  101. dog1.value = tmp1.join('\n');
  102. dog2.value = tmp2.join('\n');
  103. box3.value = '----- output diverted to breakout boxes, below ---\n\n'
  104. + 'To view the merged result here, instead:\n '
  105. + ' click \"find different\" button again and choose \"Cancel\"';
  106. } else {
  107. tmp1.concat(tmp2); tmp2 = [];
  108. dside.style.visibility ="hidden";
  109. btxt3.innerHTML = "AvsB ~~ merged list of (trimmed,non-empty) UNIQUE lines";
  110. box3.value = tmp1.join('\n');
  111. }
  112. }
  113. onload = function(){box1.focus();
  114. box2.value = "(optional) paste list B here\n\n ...or use as a scratchpad while tweaking List A"}
  115. box2.onclick = function(){if(box2.value.indexOf('(optional) paste list B')>-1)box2.value=''}
  116. </script>
  117. </div></body></html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement