AR-converter
by Stalk
HTML
Образец CSV:
<pre>1;1111;ааааа;жалобы на боль за грудиной, головокружение, боль в правой руке.
2;2222;ббббб;повышение температуры тела до 38,7С, озноб, сыпь
3;3333;ввввв;Отеки голеней, папулезная сыпь на нижних конечностях</pre><hr>
<div id="dz_wrapper">
<h3>Затащи CSV файл</h3>
<span class="size"></span><br>
<span class="date"></span>
<input type="file" id="drop_zone">
</div>
<textarea id="from" placeholder="... или вставь CSV сюда"></textarea>
<br><input type="button" id="copy" value="Копировать результат в буфер">
<input type="button" id="save" value="Сохранить файл"><br>
<textarea id="to" rows="30" style="width: 95%;"></textarea>
<a href="" style="display: none" id="a"></a>
CSS
#dz_wrapper {
width: 200px;
height: 200px;
float: left;
background: #EEE;
border: dashed 10px #CCC;
padding: 2em;
box-sizing: border-box;
position: relative;
text-align: center;
color: #777;
overflow: hidden;
}
#dz_wrapper h3, #dz_wrapper span {
color: inherit;
}
#drop_zone {
opacity: 0;
position: absolute;
top: 0; left: 0; bottom: 0; right: 0;
margin: 0;
}
textarea, input, div {
margin: 10px;
}
#from {
width: calc(95% - 220px);
height: 194px;
}
JavaScript
let splitColNumber = 3, // zero based!
colSeparator = ';',
rowSeperator = "\n",
LLT_separator = ', ',
file_name = document.querySelector('#dz_wrapper h3'),
file_size = document.querySelector('#dz_wrapper .size'),
file_date = document.querySelector('#dz_wrapper .date'),
reader = new FileReader(),
fileName = '';
from.oninput = convert
copy.onclick = copyToBuffer
reader.onload = fileLoadHandler
reader.onerror = console.log
drop_zone.onchange = fileDropHandler
save.onclick = saveFile
function convert() {
let srcRows = from.value.trim().split(rowSeperator)
let resultRows = []
if (typeof srcRows == 'object') {
srcRows.forEach(row=>{
let srcCells = row.split(colSeparator)
if (typeof srcCells == 'object') {
let targetCell = srcCells[splitColNumber] || null
if (targetCell) {
targetCell.split(LLT_separator).forEach(value=>{
let newRow = [...srcCells]
newRow[splitColNumber] = value
resultRows.push(newRow)
})
} else {
to.value = 'нет колонки №' + (splitColNumber + 1)
}
} else {
to.value = 'не удалось разобрать строку на колонки'
}
})
} else {
to.value = 'не удалось разобрать файл на строки'
}
if (resultRows.length) {
to.value = resultRows.map(row=>row.join(colSeparator)).join(rowSeperator)
}
}
function copyToBuffer() {
to.select()
document.execCommand('copy')
}
function fileDropHandler() {
let file = this.files[0] || null
//console.log('file', file)
if (file) {
file_name.textContent = fileName = file.name
file_date.textContent = new Date(file.lastModified) .toLocaleString()
file_size.textContent = file.size + ' bytes'
reader.readAsText(file, 'windows-1251')
}
}
function fileLoadHandler(evt) {
from.value = evt.target.result
convert()
}
function saveFile() {
let blob = new Blob([to.value], {type: "text/csv"}),
url =...