Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Работа с файлом (https://javascript.ru/forum/css-html-internet-explorer/21372-rabota-s-fajjlom.html)

Ганж 06.09.2011 22:48

Работа с файлом
 
Вопрос не совсем по 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. Есть ли более рациональное решение?
Ну и, конечно, советы по улучшению того, что есть, от гуру :)

lord2kim 07.09.2011 08:34

что за "book" у вас в 4 строке?
по-моему было бы правильнее, если сначала получать кол-во символов а потом уж открывать файл...
и патом...зачем вам кол-во символов? может проще взять кол-во строк (свойство Line) и рандомно выводить какую-либо строку (свойство AtEndOfLine)?

Ганж 07.09.2011 10:58

недосмотрел :) book=путь_к_файлу.
по кол-ву символов - да, согласен.
По количеству строк будет не совсем верно, некоторые предложения растянуты на несколько строк да и начинаться могут с середины строки, а нужно именно предложение полноценное забирать из файла

dmitriymar 07.09.2011 12:50

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

Ганж 08.09.2011 12:46

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


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