Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.09.2011, 22:48
Интересующийся
Отправить личное сообщение для Ганж Посмотреть профиль Найти все сообщения от Ганж
 
Регистрация: 30.07.2010
Сообщений: 14

Работа с файлом
Вопрос не совсем по js, но все же...
Необходимо: открыть текстовый файл и вытащить из него рандомное предложение.

function get_book() { 
     var fso = new ActiveXObject("Scripting.FileSystemObject");
     var fh = fso.OpenTextFile("путь_к_файлу", 1);  //открываем на чтение
     fsize = fso.GetFile(book).Size;   //получаем кол-во символов в тексте
     var number = Math.round(Math.random() * fsize);   //случайное число от 0 до fsize
     var s = fh.Read(number);      //читаем сначала и до символа number
     regexp = /\.|!|\?.*\.|!|\?/     //регулярка, берем все, что между этими знаками:".", "!", "?"
     var findQuote = s.match(regexp);
     alert(findQuote);
     fh.Close();
};


Соответственно пара вопросов:
1. Как можно получить случайное предложение (или последнее предложение из var s = fh.Read(number)?
2. Есть ли более рациональное решение?
Ну и, конечно, советы по улучшению того, что есть, от гуру
Ответить с цитированием
  #2 (permalink)  
Старый 07.09.2011, 08:34
Аватар для lord2kim
Профессор
Отправить личное сообщение для lord2kim Посмотреть профиль Найти все сообщения от lord2kim
 
Регистрация: 03.05.2011
Сообщений: 848

что за "book" у вас в 4 строке?
по-моему было бы правильнее, если сначала получать кол-во символов а потом уж открывать файл...
и патом...зачем вам кол-во символов? может проще взять кол-во строк (свойство Line) и рандомно выводить какую-либо строку (свойство AtEndOfLine)?
Ответить с цитированием
  #3 (permalink)  
Старый 07.09.2011, 10:58
Интересующийся
Отправить личное сообщение для Ганж Посмотреть профиль Найти все сообщения от Ганж
 
Регистрация: 30.07.2010
Сообщений: 14

недосмотрел book=путь_к_файлу.
по кол-ву символов - да, согласен.
По количеству строк будет не совсем верно, некоторые предложения растянуты на несколько строк да и начинаться могут с середины строки, а нужно именно предложение полноценное забирать из файла
Ответить с цитированием
  #4 (permalink)  
Старый 07.09.2011, 12:50
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Критерии регулярки для предложения.
1 Предложение начинается с большой буквы.
2 предложение всегда заканчивается на точку,воскл знак,знак вопроса .ввод идёт после знака препинания-не обр на него внимания.
3 В средине предложения могут быть любые знаки кроме больших букв и знаков из пункта 2
итого
для рус. текста регулярка приобретает вид /[А-ЯЁ][^А-ЯЁ\.\?!]*(\.|\?|!)/g
Выборка методом match- получаем массив предложений соответствующих шаблону длину какого можем узнать.
и взять рендомно элемент массива-это и будет рендомное предложение

Последний раз редактировалось dmitriymar, 07.09.2011 в 13:03.
Ответить с цитированием
  #5 (permalink)  
Старый 08.09.2011, 12:46
Интересующийся
Отправить личное сообщение для Ганж Посмотреть профиль Найти все сообщения от Ганж
 
Регистрация: 30.07.2010
Сообщений: 14

dmitriymar, спасибо. Так и сделал.
Только одно замечание по пункту 3 - в середине предложения могут быть большие буквы, имена/названия чего-либо тоже в тексте встречаются , поэтому регулярку чуть подправил.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаленная работа для JavaScript разработчика yajilt Работа 4 19.03.2011 11:51
Это работа, за неё нужно платить деньги... Kolyaj Оффтопик 20 25.01.2011 20:44
PHP работа с датой twolf Серверные языки и технологии 11 18.02.2009 01:43
Работа с формами zerocot Общие вопросы Javascript 3 16.02.2009 14:05
небольшая работа - интерфейс в ява скрипте :) int9 Работа 0 08.12.2008 22:51