Страница: 1 |
Страница: 1 |
Вопрос: работа с файлами
Добавлено: 08.04.08 18:45
Автор вопроса: eragon | ICQ: 498-084-058
Есть файл, в нем 30 строк, надо 15ую строку заменить 30. Как это сделать на ВБ6?(и важна скарость)
Ответы
Всего ответов: 13
Номер ответа: 1
Автор ответа:
el-paso
Вопросов: 3
Ответов: 164
Профиль | | #1
Добавлено: 08.04.08 22:33
Быстрее всего будет полностью прочитать все строки в массив, произвести замену строки в памяти и перезаписать новый массив обратно в файл. )
Номер ответа: 2
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #2
Добавлено: 08.04.08 22:40
не согласен. быстрее дочитать до 15 строки, найти ее смещение, найти длину строки, дальше найти 30 строку и ее длину. если размер 30 не совпадает с 15, то передвинуть остаток файла на разницу длин (или вперед или назад), на место 15 записать 30, на место 30 с учетом сдвига записать 15. чтобы выйграть по скорости нада минимизировать число записей, хотя в данных условиях это не даст никакого особо прироста.
Номер ответа: 3
Автор ответа:
s12
Вопросов: 24
Ответов: 363
Профиль | | #3
Добавлено: 09.04.08 00:25
юзай макроассемблер.
http://www.wasm.ru/article.php?article=1001012
http://www.wasm.ru/article.php?article=1001013
и будит тебе счастье...
Номер ответа: 4
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #4
Добавлено: 09.04.08 01:38
не стоит путать вкусное с мягким. ассемблер даст оптимизацию кода, который выполняет длительный расчет. здесь же слабым звеном является подсистема памяти. от ассемблера винчестер крутица быстрее не будет, и число соседних запросов не уменьшится.
предложение здесь юзать асм так же актуально, как сунуть в запорожец двиг от бугатти вейрона - с той ходовой быстрее предела на спидометре не поедешь.
Номер ответа: 5
Автор ответа:
s12
Вопросов: 24
Ответов: 363
Профиль | | #5
Добавлено: 09.04.08 02:13
Api=msvbvm60.dll ?
Винчестер он конечно крутится быстрее не будет, но можно снизить затраты процессорного времени на программную часть. Иногда очень даже помогает.
Номер ответа: 6
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #6
Добавлено: 09.04.08 07:28
в данных условиях ничем не поможет. правда если написать с использованием вариантных переменных, криво, длинно, с кучей преобразований - то конечно в таком раскладе можно затормозить даже такую нулевую задачу
Номер ответа: 7
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #7
Добавлено: 09.04.08 11:29
нефик париться Если строки не километровые, то выполнится очень даже быстро. Если тут делать мегаоптимизауию, то цель не оправдает средства.
Dim Strings(30) As String
Dim i As Long
Open FILE For Input As #1
For i = 0 To 29
Line Input #1, Strings(i)
Next
Close
Strings(30) = Strings(14)
Strings(14) = Strings(29)
Strings(29) = Strings(30)
Open FILE For Output As #1
For i = 0 To 29
Print #1, Strings(i)
Next
Close
Раскаль прав, тут от процессорного времени мало что зависит.
Номер ответа: 8
Автор ответа:
eragon
ICQ: 498-084-058
Вопросов: 4
Ответов: 4
Профиль | | #8
Добавлено: 09.04.08 14:05
А если вес файла 500метров,в котором 30000 строк, длинной по 30000символов!!!Тогда что??
Номер ответа: 9
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #9
Добавлено: 09.04.08 14:20
Тогда надо читать условие, которое сам и написал....
Если вес файла 500 метров, то тут уже будет немного другая техника.
Номер ответа: 10
Автор ответа:
eragon
ICQ: 498-084-058
Вопросов: 4
Ответов: 4
Профиль | | #10
Добавлено: 09.04.08 14:55
мне главное, чтоб навб6работало, и скорость, срочно нужно, плз
Номер ответа: 11
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #11
Добавлено: 09.04.08 15:42
на больших файлах - маппинг и анализирование области памяти (число строк, нахождение 15 и 30 строк, их длин). потом формирование всех смещений, а потом уже переписывание, причем цельными кусками - считать строку 15, 30, сдвинуть большой кусок ниже 30 строки, если 15 не соответствует размеру, сдвинуть кусок между 15 и 30 строк, переписать строку 15, 30.
вся задача сводится к одному - позволить кешированию при чтении использоваться в полной мере, и предотвратить многочисленное асинхронное записывание, которое порождает потоки в системе (поэтому пишем максимальными блоками, которые позволят решить задачу)
Номер ответа: 12
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #12
Добавлено: 09.04.08 23:29
Раскаль мегамоск Правильно мыслит, как всегда. А еще он активизировался на форуме... с чего бы?))))
Номер ответа: 13
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #13
Добавлено: 10.04.08 00:24
да делать нефик погода г, вот и активизировался