|
Помогите с поиском по csv, пожалуйста
Доброго всем времени суток.
Помогите с поиском по csv, пожалуйста. Есть csv файл со след.данными: 1,Прудников Сергей Анатольевич,672400114230,2308,97,Асс оциация МСРО "Содействие" - Ассоциация "Межрегиональная саморегулируемая организация арбитражных управляющих "Содействие" 2,Овчинников Андрей Валентинович,312000213769,1651,41,Со юз "СРО АУ СЗ" - Союз "Саморегулируемая организация арбитражных управляющих Северо-Запада" 3,Самсонов Вячеслав Алексеевич,521000170811,1629,36,САУ "СРО "ДЕЛО" - Союз арбитражных управляющих "Саморегулируемая организация "ДЕЛО" 4,Овчинников Игорь Евгеньевич,575300927883,1562,82,СРО "ААУ "Паритет" - Саморегулируемая организация "Ассоциация арбитражных управляющих "Паритет" парсю файл - $.ajax({ url: 'au.csv', dataType: 'text', }).done(successFunction); function successFunction(data) { var allRows = data.split(/\r?\n|\r/); var index={ fio:{}, inn:{}, score:{}, sro:{} }; for (var singleRow = 0; singleRow < allRows.length; singleRow++) { var rowCells = allRows[singleRow].split(','); rowCells=allRows[rowCells[0]]={ index : rowCells[0], fio : (rowCells[1] || '').trim(), inn : (rowCells[2] || '').trim(), score : (rowCells[3] || '').trim()+','+(rowCells[4] || '').trim(), sro : (rowCells[5] || '').trim() }; //console.log(rowCells); } } как теперь сделать поиск по фамилии на стороне клиента? чтобы только по фамилии пользователь мог получать все данные об искомом челе из csv файла. а если есть однофамильцы, чтобы выводились и совпадения по фамилии тоже. Плюс в карму гарантирован. Заранее спасибо знатокам. |
Поиск на сервере в файле или фильтрация полученного результата на клиенте?????
|
Мне нужно чтобы пользователь забил фамилию в поиск и получил все что есть на этого чела из csv файла
|
считываешь файл, через fs, потом собираешь массив - 1 строка файла - одна ячейка. получаешь вид массива такой:
let arr = [ ['name' : 'Прудников Сергей Анатольевич', 'hz': '672400114230,2308,97', 'company': 'Асс оциация МСРО "Содействие" - Ассоциация "Межрегиональная саморегулируемая организация арбитражных управляющих "Содействие"']; ... ] И через цикл ищешь совпадения. Все. Работает. |
Это если на сервере обработку делать, ну а если на клиенте, то просто собираешь данные в массив и потом ищешь совпадения. Все. Работает.
Я же спросил, где нужен поиск на сервере или на клиенте. |
считываешь файл, через fs.... сорри. что такое fs?
Как закинуть результат парсинга в массив, если я с объектом работаю? Пользователь ищет искомого только по фамилии, а у меня по вашему получается в массиве сделать полный обход по индексу name, затем регуляркой или как? вытащить совпавшую фамилию.... а если есть однофамильцы? вообще повесится? |
поиск на клиенте.
p.s. поправка - не как а зачем закидывать результат парсинга в массив? чем работа с объектом плоха? |
потому что вы работаете с массивом данных. результат вашего парсинга это массив объектов. В прошлом коменте я не правильно написал, надо так:
let arr = [ {'name' : 'Прудников Сергей Анатольевич', 'hz': '672400114230,2308,97', 'company': 'Асс оциация МСРО "Содействие" - Ассоциация "Межрегиональная саморегулируемая организация арбитражных управляющих "Содействие"'}; ... ] Из этого массива необходимо собрать таблицу наверное или список какой-то, а потом ты подгони код ниже под свой и будет работать. Теперь код, писал правда давно, но я думаю что у вас все получится, смысл такой, что у тебя есть какая-то таблица с данными, типа тех, из файла, ты считываешь событие input на input'е и сравниваешь с тем что у тебя есть. let inputFilterValue = input.value.toLowerCase(); // это то что вводишь в инпут var count = []; // счетчик for (var i = 0;i < data.length;i++) { // data.length - это длинна массивы с данными var cell = deta[i].cells; // что такое cells посмотри сам for (var f = 0; f < cell.length;f++) { if (inputFilterValue.length >= 3) { // поиск только после 3 символов, так лучше if (cell[f].innerHTML.toLowerCase().indexOf(inputFilterValue) > -1) count.push(cell[f]); // сравнение for (var s = 0; s < count.length;s++) { // тут мы оставляем на экране только совпадения count[s].classList.add('find'); count[s].parentNode.setAttribute('data-view', 'true'); } _ELEMENTS.filter.info.innerHTML = (count.length > 0) ? 'Рузультат поиска: ' + count.length : 'Ничего не найдено'; // это если нет результатов поиска , то выводим сообщение, а если нет сам смотри } else { cell[f].parentNode.setAttribute('data-view', 'default'); cell[f].classList.remove('find'); _ELEMENTS.filter.info.innerHTML = ''; count.splice(0, count.length); } } } Я думаю разберешься. Код рабочий, у меня работает |
Простите пожалуйста, но иногда лучше вообще не отвечать, чем так как вы.
Я же черным по белому написал - есть веб страничка на ней инпут со словами - введите фамилию чтобы получить всю инфу о челе. Пользователь вводит фамилию->запрос на сервер->парсим csv->если есть така фамилия - выводим всю инфу об этом челе или людях, если есть совпадения. Пример csv дал, как парсю написал. Попросил - помогите написать скрипт поиска. Что не так??? Зачем кидать общие фразы и код который у вас работает. Мне нужен код который конкретно работает с моими данными а не с вашей табличкой |
Vlad777, если запрашивать сервер (поиск), то тут два варианта:
1) сервер вывалил все данные клиенту, в котором производится поиск - либо нашел, либо нет, более запросы на сервер не будут, все ищется уже в загруженном. 2) вариант - сервер разбил на строки CSV файл (массив), в котором ищет запрошенное - есть ли совпадение подстроки которую ищут в массиве, если да извлекает эти строки возвращая массив (на клиенте это будет массив объектов) Выберите из двух что для вас предпочтительнее. |
Часовой пояс GMT +3, время: 03:49. |
|