Changeset 6471
- Timestamp:
- Nov 4, 2021, 2:16:10 PM (15 months ago)
- Location:
- extensions/net.sf.basedb.reggie/branches/4.33-stable
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
extensions/net.sf.basedb.reggie/branches/4.33-stable/resources/personal/map-external-data.js
r5740 r6471 56 56 var lineNo = 0; 57 57 var mapFrom = null; 58 var separator = null; 58 59 var preview = ''; 59 60 while (lineNo < lines.length && lineNo < 5) 60 61 { 61 62 var line = lines[lineNo]; 62 if (lineNo < 3)63 if (lineNo < 4) 63 64 { 64 65 preview += Strings.encodeTags(line) + '\n'; 65 66 } 67 if (separator == null) separator = map.detectSeparator(line); 66 68 if (mapFrom == null) 67 69 { 68 if (line.match(/^[QCS]\d+ \t.*$/))// We look for lines starting with 'Q', 'C' or 'S' followed by {digits} and a {tab}70 if (line.match(/^[QCS]\d+([\t,;].*)?$/))// We look for lines starting with 'Q', 'C' or 'S' followed by {digits} and a {tab/comma/semicolon} 69 71 { 70 72 var firstChar = line.charAt(0); … … 82 84 } 83 85 } 84 else if (lineNo == 0 && line.match(/^[^\t ]*pad/i)) // If the first header column contains 'pad' (ignoring case) we assume it contains PAD values86 else if (lineNo == 0 && line.match(/^[^\t,;]*pad/i)) // If the first header column contains 'pad' (ignoring case) we assume it contains PAD values 85 87 { 86 88 mapFrom = 'PAD'; … … 89 91 lineNo++; 90 92 } 91 if (lines.length > 3) preview += '<div id="more-lines">+' + (lines.length-3) + ' more lines...</div>'; 93 if (lines.length > 4) preview += '<div id="more-lines">+' + (lines.length-4) + ' more lines...</div>'; 94 frm.separator.value = separator ? separator.id : 'tab'; 92 95 frm.mapFrom.value = mapFrom || 'PersonalNo'; 93 96 Events.sendChangeEvent(frm.mapFrom); … … 95 98 } 96 99 100 /** 101 Detect the "best" separator to use by selecting the one 102 that appear the most times in the given text line. If no 103 separator is found null is returned. 104 */ 105 map.detectSeparator = function(text) 106 { 107 var separators = 108 [ 109 { 'id': 'tab', 'test': /\t/g, 'sep': '\t'}, 110 { 'id': 'comma', 'test': /,/g, 'sep': ','}, 111 { 'id': 'semicolon', 'test': /;/g, 'sep': ';'} 112 ]; 113 var maxCount = 0; 114 var bestMatch = 0; 115 for (var i=0; i < separators.length; i++) 116 { 117 var sep = separators[i]; 118 var m = text.match(sep.test); 119 if (m && m.length > maxCount) 120 { 121 maxCount = m.length; 122 bestMatch = i; 123 } 124 } 125 return maxCount == 0 ? null : separators[bestMatch]; 126 } 97 127 98 128 map.validateStep1 = function(event) … … 113 143 var url = '../Export.servlet?ID='+App.getSessionId(); 114 144 url += '&cmd=MapDataToReleases'; 145 url += '&separator='+frm.separator.value; 115 146 url += '&mapFrom='+Strings.encodeTags(frm.mapFrom.value); 116 147 url += '&exportCaseId='+(frm.exportCaseId.checked ? 1 : 0); -
extensions/net.sf.basedb.reggie/branches/4.33-stable/resources/personal/map-external-data.jsp
r5740 r6471 81 81 <td class="help" rowspan="2"><span id="file.message" class="message"></span> 82 82 <ul> 83 <li>Select a tab- separated text file in UTF-8 encoding.83 <li>Select a tab-, comma-, or semicolon-separated text file in UTF-8 encoding. 84 84 <li>The first line should contain column headers. 85 85 <li>The first column should contain the personal number, or a release id value as specified by the <b>Map from</b> option. … … 93 93 <td> 94 94 <div id="preview"><i>No file loaded...</i></div> 95 </td> 96 <td></td> 97 </tr> 98 <tr> 99 <td class="prompt">Separator</td> 100 <td> 101 <select name="separator" id="separator"> 102 <option value="tab">Tab 103 <option value="comma">Comma 104 <option value="semicolon">Semi-colon 105 </select> 95 106 </td> 96 107 <td></td> -
extensions/net.sf.basedb.reggie/branches/4.33-stable/src/net/sf/basedb/reggie/servlet/ExportServlet.java
r6470 r6471 538 538 ReggieRole.checkPermission(dc, "'" + cmd + "' wizard", ReggieRole.PATIENT_CURATOR, ReggieRole.ADMINISTRATOR); 539 539 540 String separator = Values.getString(req.getParameter("separator"), "tab"); 540 541 String mapFrom = Values.getString(req.getParameter("mapFrom"), "PersonalNo"); 541 542 boolean exportCaseId = Values.getBoolean(req.getParameter("exportCaseId")); … … 544 545 boolean sortOutput = Values.getBoolean(req.getParameter("sortOutput")); 545 546 547 String separatorChar = "\t"; 548 if ("comma".equals(separator)) 549 { 550 separatorChar = ","; 551 } 552 else if ("semicolon".equals(separator)) 553 { 554 separatorChar = ";"; 555 } 556 546 557 SnapshotManager manager = new SnapshotManager(); 547 558 List<OutputColumn> outColumns = new ArrayList<>(); … … 605 616 String header = uploadReader.readLine(); 606 617 long parsedCharacters = header.length()+1; 607 String[] dataIn = header.split( "\t", 2);618 String[] dataIn = header.split(separatorChar, 2); 608 619 if (dataIn.length == 2) outColumns.add(new RestOfData(dataIn[1])); 609 620 … … 627 638 progress.display((int)(100*parsedCharacters / totalBytes), "Working... " + inputLine.lineNo + " lines parsed so far..."); 628 639 629 inputLine.cols = data.split( "\t", 2);640 inputLine.cols = data.split(separatorChar, 2); 630 641 inputLine.fromId = Values.getStringOrNull(inputLine.cols[0]); 631 642 if (inputLine.fromId == null) … … 669 680 tmpOut = new CipherOutputStream(Application.getStaticCache().write(outputFilePath, 5), cipher); 670 681 tmpWriter = new TableWriter(new OutputStreamWriter(tmpOut, "UTF-8")); 682 tmpWriter.setDataSeparator(separatorChar); 671 683 tmpWriter.tablePrintData(headerOut); 672 684 for (Object[] outLines : dataOut)
Note: See TracChangeset
for help on using the changeset viewer.