Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.12.2016, 23:56
Интересующийся
Отправить личное сообщение для SergeyPetrovA Посмотреть профиль Найти все сообщения от SergeyPetrovA
 
Регистрация: 30.08.2015
Сообщений: 14

Из txt выбрать нужные строки и сформировать csv
Я совсем новичок. Есть желание потихоньку изучать JavaScript, через определенные задачки.

Подскажите каким путем проще сделать ниже описанную задачку (так, чтобы новичку разобраться)?. Хостинг есть. Скорее всего без php не обойтись. Подскажите куда и как копать.

Есть файл txt c следующими данными:
Код:
dn: uid=fimso,ou=People,dc=glories,dc=info
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
objectClass: organizationalPerson
cn: ?
description: ?
displayName: ?
o: ?
mail: Sfvbnn@ghhn.ru
givenName: Sofia
sn: Metlyaeva
telephoneNumber: 79836967727
uidNumber: 12
gidNumber: 65534
gecos: autoregister
homeDirectory: /home/fimso
loginShell: /bin/sh
shadowExpire: 24836
roomName: ?
hidden: no
ownerUser: admin
MCpInterfaces: ?
maxDays: ?
class: 2016
loginRemote: ?
structuralObjectClass: inetOrgPerson
entryUUID: ea89cec8-e50b-1035-95a3-a27235935c78
creatorsName: cn=Manager,dc=glories,dc=info
createTimestamp: 20160723102818Z
uid: fimso
validity: yes
sessions: 2
entryCSN: 20160723111407Z#000002#00#000000
modifiersName: cn=Manager,dc=glories,dc=info
modifyTimestamp: 20160723111407Z

dn: cn=fimso,ou=Radius,dc=glories,dc=info
objectClass: organizationalPerson
objectClass: top
objectClass: radiusprofile
objectClass: radiusExtension
cn: fimso
sn: 12334
dialupAccess: yes
radiusUserCategory: 2016
structuralObjectClass: radiusExtension
entryUUID: ea8d98dc-e50b-1035-95a4-a27235935c78
creatorsName: cn=Manager,dc=glories,dc=info
createTimestamp: 20160723102818Z
entryCSN: 20160723102818Z#000002#00#000000
modifiersName: cn=Manager,dc=glories,dc=info
modifyTimestamp: 20160723102818Z
Такой фрагмент повторяется энное количество раз. В таком блоке меня интересует только вот такие строки:
Код:
mail: vasilevskiy.a@mail.ru
givenName: Alex
sn: Vasil
telephoneNumber: 79618518410
createTimestamp: 20160723101538Z
От блока к блоку эти данные разные и они мне нужны.
В итоге хочу получить некий csv файл вида:

Конечно не обязательно формировать прямо файл, достаточно вывести на экран строчки с данными и разделенные ";".

Заранее всем благодарен!
Ответить с цитированием
  #2 (permalink)  
Старый 11.12.2016, 10:50
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Можно разобрать, но только если файл не имеет ошибок, как например здесь - sn: Metlyaeva и sn: 12334, последнее не известно кому принадлежит.
Ответить с цитированием
  #3 (permalink)  
Старый 11.12.2016, 11:09
Интересующийся
Отправить личное сообщение для SergeyPetrovA Посмотреть профиль Найти все сообщения от SergeyPetrovA
 
Регистрация: 30.08.2015
Сообщений: 14

Второй sn будет как мусор, ну и фиг с ним.
Сейчас дошел до следующей логики (еще не реализовал):
Перебираем строки файла - в цикле запрашиваем по очередно строки (методом пост через XMLHttpRequest в php, который отдает строчку из txt), смотрим строчку, если есть "email:" отдаем остальное и ставим ";" и т.д. (нужные строчки), если встречаем пустую строчку - отдаем <br>.
По идее на выходе получим что что типа:
Sfvbnn@ghhn.ru;Sofia;Metlyaeva;79836967727;20160723102818Z;
12334; - это будет мусор

и т.д.
Изящество мне не надо, мне надо получить результат (разовая задачка и для использования только мне, не хочется в ручную лопатить 7000 строк).
Ответить с цитированием
  #4 (permalink)  
Старый 11.12.2016, 11:20
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

SergeyPetrovA, всё это делается элементарно в текстовом редакторе (например notepad++), всё остальное про желание изучать, хостинг, javascript, php и тд твои больные фантазии.
Ответить с цитированием
  #5 (permalink)  
Старый 11.12.2016, 11:43
Интересующийся
Отправить личное сообщение для SergeyPetrovA Посмотреть профиль Найти все сообщения от SergeyPetrovA
 
Регистрация: 30.08.2015
Сообщений: 14

Сообщение от Rise Посмотреть сообщение
SergeyPetrovA, всё это делается элементарно в текстовом редакторе (например notepad++), всё остальное про желание изучать, хостинг, javascript, php и тд твои больные фантазии.
Подскажите как в текстовом сделать? Буду премного благодарен.
Паралельно хотел бы сделать через JS - повод чуть разобраться с JS (иногда появляется необходимость хоть чуть понимать что к чему).
Ответить с цитированием
  #6 (permalink)  
Старый 11.12.2016, 12:05
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

SergeyPetrovA, Find and replace
Ответить с цитированием
  #7 (permalink)  
Старый 11.12.2016, 12:10
Интересующийся
Отправить личное сообщение для SergeyPetrovA Посмотреть профиль Найти все сообщения от SergeyPetrovA
 
Регистрация: 30.08.2015
Сообщений: 14

Rise,
Спасибо.
Ответить с цитированием
  #8 (permalink)  
Старый 11.12.2016, 12:42
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от SergeyPetrovA
Второй sn будет как мусор, ну и фиг с ним.
Ну если так, что тогда париться, да берите все скопом

Это делается элементарно, хоть серверным, хоть клиентским скриптом. Но коли вам надо получить "связанное", а не понять что, то должна быть строгая последовательность в данных, то есть не может встречаться очередной mail до тех пор, пока не будут получены другие поля. То есть сперва перечислены все поля одной сущности, затем другой и т.д. до конца. Посредством РНР и простым обходом массива к примеру так:

$arr = []; 
$k = 0;

foreach(file('data.txt', FILE_SKIP_EMPTY_LINES ) as $v) {
    
    if(preg_match('/mail|givenName|sn|telephoneNumber|createTimestamp/', $v)) {
        $v = array_map('trim', explode(':', $v));
        $arr[$v[0]][$k] = $v[1];
    }
    if(count(array_column($arr, $k))==5) $k++;
}
echo '<pre>';
print_r($arr);


Для его выполнение требуется РНР не ниже версии 5.5.
Ответить с цитированием
  #9 (permalink)  
Старый 11.12.2016, 13:20
Интересующийся
Отправить личное сообщение для SergeyPetrovA Посмотреть профиль Найти все сообщения от SergeyPetrovA
 
Регистрация: 30.08.2015
Сообщений: 14

laimas,
Вау! Огромное спасибо!!!
Сорри, а как можно вывести без ключа?
Ответить с цитированием
  #10 (permalink)  
Старый 11.12.2016, 14:14
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от SergeyPetrovA
а как можно вывести без ключа?
А зачем без ключа, если клиент строит таблицу ключи которой являются ее заголовками? Или это csv только для Excel?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
График JS из txt или csv Darell Общие вопросы Javascript 0 23.04.2016 21:53
как выбрать цифру из строки? imedia Элементы интерфейса 5 18.09.2014 16:53
Выбрать число из строки Nihisil Общие вопросы Javascript 4 09.03.2011 08:49
Скрипт для рандомного отображения строки из txt gladushka Общие вопросы Javascript 8 12.11.2010 23:29
Разбор строки из txt файла guffer Общие вопросы Javascript 4 18.05.2010 10:21