Работа с файлом
Вопрос не совсем по 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. Есть ли более рациональное решение? Ну и, конечно, советы по улучшению того, что есть, от гуру :) |
что за "book" у вас в 4 строке?
по-моему было бы правильнее, если сначала получать кол-во символов а потом уж открывать файл... и патом...зачем вам кол-во символов? может проще взять кол-во строк (свойство Line) и рандомно выводить какую-либо строку (свойство AtEndOfLine)? |
недосмотрел :) book=путь_к_файлу.
по кол-ву символов - да, согласен. По количеству строк будет не совсем верно, некоторые предложения растянуты на несколько строк да и начинаться могут с середины строки, а нужно именно предложение полноценное забирать из файла |
Критерии регулярки для предложения.
1 Предложение начинается с большой буквы. 2 предложение всегда заканчивается на точку,воскл знак,знак вопроса .ввод идёт после знака препинания-не обр на него внимания. 3 В средине предложения могут быть любые знаки кроме больших букв и знаков из пункта 2 итого для рус. текста регулярка приобретает вид /[А-ЯЁ][^А-ЯЁ\.\?!]*(\.|\?|!)/g Выборка методом match- получаем массив предложений соответствующих шаблону длину какого можем узнать. и взять рендомно элемент массива-это и будет рендомное предложение |
dmitriymar, спасибо. Так и сделал.
Только одно замечание по пункту 3 - в середине предложения могут быть большие буквы, имена/названия чего-либо тоже в тексте встречаются :) , поэтому регулярку чуть подправил. |
Часовой пояс GMT +3, время: 08:36. |