Есть текстовый файл, в нём хранятся данные в таком формате:
#31~Страна~
@135~Город1~
$8~Тип1
$1~Тип2
@136~Город2~
$8~Тип1
$15~Тип3
Формат файла менять нельзя. Как реализовать работу с данным тхт файлом, как с массивом?
Тоесть в форме выбирается страна. Идёт проверка в файле по этой стране и если есть данные (город), то создаётся селект с выбором города. При выборе города, проверка в файле и вывод Типа.
Естественно не решение нужно, а при помощи чего реализовать? а то я в полном ступоре, не пойму с чего начать. Спасибо
Думаю, мысль понятна:
let db = `#31~Страна~
@135~Город1~
$8~Тип1
$1~Тип2
@136~Город2~
$8~Тип1
$15~Тип3`;
let countries = {};
let cities = {};
let types = {};
db.split("\n").reduce((p, s) => {
let [, num, name] = s.match(/(\d+)~([^~]+)/);
switch (s.trim().charAt(0)) {
case '#':
p.co = num;
countries[num] = name;
break;
case '@':
p.ci = num;
if (!(p.co in cities)) cities[p.co] = [];
cities[p.co].push([p.ci, name]);
break;
case '$':
p.ty = num;
if (!(p.ci in types)) types[p.ci] = [];
types[p.ci].push([p.ty, name]);
break;
}
return p;
}, {co: null, ci: null, ty: null});
V = new Vue({
el: '#root',
data: {
country: -1,
city: -1,
type: -1
}
});
[v-cloak] {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<div id='root' v-cloak>
<select v-model="country">
<option disabled value="-1">Pick your option here</option>
<option v-for="(name, key) in countries" :key="key" :value="key">{{ name }}</option>
</select>
<select v-model="city" v-if="country in cities">
<option disabled value="-1">Pick your option here</option>
<option v-for="(city, key) in cities[country]" :key="city[0]" :value="city[0]">{{ city[1] }}</option>
</select>
<select v-model="type" v-if="city in types">
<option disabled value="-1">Pick your option here</option>
<option v-for="(type, key) in types[city]" :key="type[0]" :value="type[0]">{{ type[1] }}</option>
</select>
</div>
Я набросал код, который помещает в массив страны - отдельно код, отдельно название - и всю мешанину городов. Я могу и города обработать, если надо - но просто думаю, что в коротком коде легче видна суть. Если надо и города - мне нетрудно
var txt ='#31~Страна~ @135~Город1~ $8~Тип1 $1~Тип2 @136~Город2~ $8~Тип1 $15~Тип3#31~Страна~ @135~Город1~ $8~Тип1 $1~Тип2 @136~Город2~ $8~Тип1 $15~Тип3';
var re1 = /#\d+~[А-Яа-я]+~[^#]+/g;
var re2 = /#(\d+)~([А-Яа-я]+)~([^#]+)/;
var massiv = []; //Массив, в который преобразуем текст
if(re1.test(txt))
{
var m1= txt.match(re1); //массив подстрок, соотв. странам
for(var i = 0; i < m1.length; i++)
{
var oneCountry = m1[i];
var m2 = oneCountry.match(re2); //разбор одной страны
massiv[i] = { 'countryCode': m2[1] , 'counrtyName': m2[2], 'cities' : m2[3] };
}
console.log(massiv);
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
В корневом компоненте app-component расположен header с несколькими ссылками для перехода по роутам, которые выводятся тут-же ниже в router-outletСтраницы,...
Модернизирую найденный кодВ оригинале клочья тумана проходят снизу вверх по canvas, и исчезают