Страница: 1 |
Вопрос: работа с файлами | Добавлено: 08.04.08 18:45 |
Автор вопроса: ![]() |
Есть файл, в нем 30 строк, надо 15ую строку заменить 30. Как это сделать на ВБ6?(и важна скарость) |
Ответы | Всего ответов: 13 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() Вопросов: 3 Ответов: 164 |
Профиль | Цитата | #1 | Добавлено: 08.04.08 22:33 |
Быстрее всего будет полностью прочитать все строки в массив, произвести замену строки в памяти и перезаписать новый массив обратно в файл. ![]() |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 8068014 Вопросов: 18 Ответов: 817 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 08.04.08 22:40 |
не согласен. быстрее дочитать до 15 строки, найти ее смещение, найти длину строки, дальше найти 30 строку и ее длину. если размер 30 не совпадает с 15, то передвинуть остаток файла на разницу длин (или вперед или назад), на место 15 записать 30, на место 30 с учетом сдвига записать 15. чтобы выйграть по скорости нада минимизировать число записей, хотя в данных условиях это не даст никакого особо прироста. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 8068014 Вопросов: 18 Ответов: 817 |
Web-сайт: Профиль | Цитата | #4 | Добавлено: 09.04.08 01:38 |
не стоит путать вкусное с мягким. ассемблер даст оптимизацию кода, который выполняет длительный расчет. здесь же слабым звеном является подсистема памяти. от ассемблера винчестер крутица быстрее не будет, и число соседних запросов не уменьшится.
предложение здесь юзать асм так же актуально, как сунуть в запорожец двиг от бугатти вейрона - с той ходовой быстрее предела на спидометре не поедешь. |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 24 Ответов: 363 |
Профиль | Цитата | #5 | Добавлено: 09.04.08 02:13 |
Api=msvbvm60.dll ?
Винчестер он конечно крутится быстрее не будет, но можно снизить затраты процессорного времени на программную часть. Иногда очень даже помогает. ![]() |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 8068014 Вопросов: 18 Ответов: 817 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 09.04.08 07:28 |
в данных условиях ничем не поможет. правда если написать с использованием вариантных переменных, криво, длинно, с кучей преобразований - то конечно в таком раскладе можно затормозить даже такую нулевую задачу |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Администратор ICQ: 278109632 Вопросов: 42 Ответов: 3949 |
Web-сайт: Профиль | Цитата | #7 | Добавлено: 09.04.08 11:29 |
нефик париться ![]() Const FILE = "z:\tmp\test.txt"
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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() 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 |
Тогда надо читать условие, которое сам и написал....
Есть файл, в нем 30 строк, надо 15ую строку заменить 30.
Если вес файла 500 метров, то тут уже будет немного другая техника. |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 498-084-058 Вопросов: 4 Ответов: 4 |
Профиль | Цитата | #10 | Добавлено: 09.04.08 14:55 |
мне главное, чтоб навб6работало, и скорость, срочно нужно, плз |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 8068014 Вопросов: 18 Ответов: 817 |
Web-сайт: Профиль | Цитата | #13 | Добавлено: 10.04.08 00:24 |
да делать нефик ![]() ![]() |
Страница: 1 |
|