07.12.2018, 10:10
|
Аспирант
|
|
Регистрация: 01.03.2018
Сообщений: 37
|
|
Помогите с поиском по 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 файла.
а если есть однофамильцы, чтобы выводились и совпадения по фамилии тоже.
Плюс в карму гарантирован. Заранее спасибо знатокам.
Последний раз редактировалось Vlad777, 07.12.2018 в 11:26.
|
|
07.12.2018, 10:26
|
Профессор
|
|
Регистрация: 12.08.2016
Сообщений: 299
|
|
Поиск на сервере в файле или фильтрация полученного результата на клиенте?????
|
|
07.12.2018, 10:29
|
Аспирант
|
|
Регистрация: 01.03.2018
Сообщений: 37
|
|
Мне нужно чтобы пользователь забил фамилию в поиск и получил все что есть на этого чела из csv файла
|
|
07.12.2018, 10:54
|
Профессор
|
|
Регистрация: 12.08.2016
Сообщений: 299
|
|
считываешь файл, через fs, потом собираешь массив - 1 строка файла - одна ячейка. получаешь вид массива такой:
let arr = [
['name' : 'Прудников Сергей Анатольевич', 'hz': '672400114230,2308,97', 'company': 'Асс оциация МСРО "Содействие" - Ассоциация "Межрегиональная саморегулируемая организация арбитражных управляющих "Содействие"'];
...
]
И через цикл ищешь совпадения. Все. Работает.
|
|
07.12.2018, 10:56
|
Профессор
|
|
Регистрация: 12.08.2016
Сообщений: 299
|
|
Это если на сервере обработку делать, ну а если на клиенте, то просто собираешь данные в массив и потом ищешь совпадения. Все. Работает.
Я же спросил, где нужен поиск на сервере или на клиенте.
|
|
07.12.2018, 11:01
|
Аспирант
|
|
Регистрация: 01.03.2018
Сообщений: 37
|
|
считываешь файл, через fs.... сорри. что такое fs?
Как закинуть результат парсинга в массив, если я с объектом работаю?
Пользователь ищет искомого только по фамилии, а у меня по вашему получается в массиве сделать полный обход по индексу name, затем регуляркой или как? вытащить совпавшую фамилию....
а если есть однофамильцы? вообще повесится?
|
|
07.12.2018, 11:01
|
Аспирант
|
|
Регистрация: 01.03.2018
Сообщений: 37
|
|
поиск на клиенте.
p.s. поправка - не как а зачем закидывать результат парсинга в массив? чем работа с объектом плоха?
Последний раз редактировалось Vlad777, 07.12.2018 в 11:07.
|
|
07.12.2018, 11:29
|
Профессор
|
|
Регистрация: 12.08.2016
Сообщений: 299
|
|
потому что вы работаете с массивом данных. результат вашего парсинга это массив объектов. В прошлом коменте я не правильно написал, надо так:
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);
}
}
}
Я думаю разберешься. Код рабочий, у меня работает
|
|
07.12.2018, 11:45
|
Аспирант
|
|
Регистрация: 01.03.2018
Сообщений: 37
|
|
Простите пожалуйста, но иногда лучше вообще не отвечать, чем так как вы.
Я же черным по белому написал - есть веб страничка на ней инпут со словами - введите фамилию чтобы получить всю инфу о челе.
Пользователь вводит фамилию->запрос на сервер->парсим csv->если есть така фамилия - выводим всю инфу об этом челе или людях, если есть совпадения.
Пример csv дал, как парсю написал.
Попросил - помогите написать скрипт поиска.
Что не так???
Зачем кидать общие фразы и код который у вас работает.
Мне нужен код который конкретно работает с моими данными а не с вашей табличкой
|
|
07.12.2018, 11:54
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Vlad777, если запрашивать сервер (поиск), то тут два варианта:
1) сервер вывалил все данные клиенту, в котором производится поиск - либо нашел, либо нет, более запросы на сервер не будут, все ищется уже в загруженном.
2) вариант - сервер разбил на строки CSV файл (массив), в котором ищет запрошенное - есть ли совпадение подстроки которую ищут в массиве, если да извлекает эти строки возвращая массив (на клиенте это будет массив объектов)
Выберите из двух что для вас предпочтительнее.
|
|
|
|