Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Помогите организовать поиск по текстовой базе данных (https://javascript.ru/forum/dom-window/51739-pomogite-organizovat-poisk-po-tekstovojj-baze-dannykh.html)

Янковиц 17.11.2014 19:14

Помогите организовать поиск по текстовой базе данных
 
Есть база данных в формате txt со следующим содержанием
значение 1| значение 2| значение 2|значение 4
как организовать поиск по этим значениям, или хотя бы по одному из них.

krutoy 17.11.2014 19:23

Янковиц,
С помощью регекпов, видимо.

krutoy 17.11.2014 19:29

Янковиц,
в твоем случае вот этого достаточно может оказаться
str="value 1| value 2| value 2|value 4"
re=/[^|]+/g
alert(str.match(re))

формируем массив из данных. А дальше что делать, из твоего поста не понятно.

Янковиц 17.11.2014 19:31

А по проще, может ссылку дадите?

krutoy 17.11.2014 19:32

Что попроще?

Янковиц 17.11.2014 19:35

Есть форма:
<form name="forma6">
<input class="text" type="text" ></p>
<input type="button"/>
<textarea wrap="virtual" name="res"></textarea></form>

В верхнее поле вводится значение 1
жмём кнопку
и в нижнем поле отображается значение 2, 3 и 4

Янковиц 17.11.2014 19:37

Массив данных есть, выглядит по такой схеме:
значение 1 |значение 2| значение 3 |значение 4
номер лицевого счета| ФИО | адрес | баланс

рони 17.11.2014 19:38

Цитата:

Сообщение от krutoy
str.match(re)

:write:
str.split('|')

Янковиц 17.11.2014 19:42

я в javascript ничего не смыслю, можете разжевать?

Янковиц 17.11.2014 19:47

а где подключение к массиву из данных?

Янковиц 17.11.2014 19:48

а где подключение к текстовой базе данных?

krutoy 17.11.2014 19:50

Цитата:

Сообщение от Янковиц
а где подключение к массиву из данных?

Я удалил вариант, я не правильно понял.
Если данные находятся в сторонем текстовом файле, доступа из браузера к ним не будет. Только если через сервер, можно локальный. Просто прочесть из ФС ,браузер не может

Янковиц 17.11.2014 19:51

Вот здесь есть вариант
http://mat.net.ua/computer/java-scri...cript-0704.htm
но мне необходим более сжатый
так как база будет состоять из 15000 строк

Янковиц 17.11.2014 19:53

база данных и должна быть отдельной, и по возможности нужно будет её потом скрыть, но это уже я знаю как

krutoy 17.11.2014 20:04

Янковиц,
Там, в этой "dataset.txt" сохраняется синтаксис JS. Твой же файл вызовет ошибку при загрузке. Если хочешь реализовать что-то подобное, формат твоего текстового файла должен сответствовать синтаксису JS. Например так

str="value1 | value2 | value3"

Янковиц 17.11.2014 20:17

а форма вызова функции на html, и js остаются такими же?

krutoy 17.11.2014 20:25

Янковиц,
Да, все остается, JS движок просто будет думать, что подключен js-файл. Данные будут извлекатся из переменной str. Но, учти, что строка эта должна быть или без переносов строк, или переносы должны экранироваться. То есть, например, вот такой вариант

str="
value1 |
value2 |
value2 |
"
Тоже не пойдет.

krutoy 17.11.2014 20:30

Цитата:

Сообщение от Янковиц
а форма вызова функции на html

Чуть позже я напишу тебе, примерно, как это будет выглядеть.

Янковиц 17.11.2014 20:32

А могу примерно так начать?
function Vday2(obj){
  var a=obj.zn.value.toLowerCase();
  var s;
  switch (a)
  {
str="value1 | value2 | value3"
str="value1 | value2 | value3"
str="value1 | value2 | value3"
str="value1 | value2 | value3"
str="value1 | value2 | value3"
str="value1 | value2 | value3"
   default: s='Извините такого лицевого счета не существует'
  }
  obj.res.value=s;
}

я вместо срочек
case 'а': s="bəs"; break;
case 'абзац': s="abzas"; break;
case 'аборт': s="abort"; break;

str="value1 | value2 | value3"
вписал, чувствую что-то не то

Янковиц 17.11.2014 20:34

А форма вот такая?
<form name="forma">
<input class="text" type="text" name="zn"/>
<input type="button" value="Узнать баланс" onClick="Vday2(forma);"/>
<textarea wrap="virtual" name="res"></textarea></form>

Янковиц 17.11.2014 20:38

Цитата:

Сообщение от krutoy (Сообщение 341426)
Чуть позже я напишу тебе, примерно, как это будет выглядеть.

А javascript можешь чиркануть? Пожалуйста.:help:

krutoy 17.11.2014 20:44

Янковиц,
Да, хорошо

krutoy 17.11.2014 22:16

Файл database.txt (без переносов строк, для разбиения данных используется символ переноса строки \n, лежит в той же директории, что html)
str="1234 | Калашников Игорь Владимирович | ул. Московская д.3 кв.35 | 30.000 \n 1235 | Петров Николай Николаевич | ул. Ситникова д.7 кв. 55 | 500.000"

HTML:
<!DOCTYPE html>
<html>
<head>
    <title></title>
<meta charset="windows-1251">
<script src="database.txt"></script>
</head>
<body>
 
<form name="forma6">
<input class="text" type="text" />
<input id="but" type="button"/>
<textarea wrap="virtual" name="res"></textarea></form>

<script type="text/javascript">
 
var arr=str.split("\n")
var first=function(str){
  s=str.match(/^[^|]+/)[0]
  if(s) s=s.replace(/\s+/g, "")
  if(s) return s
}
var rest=function(str){
  return str.split("|").slice(1).join("\n")
}
 
var search=function(str){
   try{
         arr.forEach(function(el){if(first(el)===str) throw rest(el)})
      }catch(e){return e}
  return "No such account"
}
 
 
var input=document.querySelector("input")
var textarea=document.querySelector("textarea")
textarea.style.width="500px"
textarea.style.height="200px"
var but=document.querySelector("#but")
but.onclick=function(){textarea.value=search(input.value.trim())}
 
</script>
</body>
  
</html>

Для тестирования можешь ввести в input 1234 1235 и 1236(не существует) Протестировать можешь на своем локальном компьютере.

Янковиц 18.11.2014 18:14

Спасибо, работает!!! Уважаю тех, кто профессионал в своем деле.:)


Часовой пояс GMT +3, время: 10:55.