Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: www.rascalspb.narod.ru
 Профиль | | #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-сайт: www.rascalspb.narod.ru
 Профиль | | #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-сайт: www.rascalspb.narod.ru
 Профиль | | #6
Добавлено: 09.04.08 07:28
в данных условиях ничем не поможет. правда если написать с использованием вариантных переменных, криво, длинно, с кучей преобразований - то конечно в таком раскладе можно затормозить даже такую нулевую задачу

Ответить

Номер ответа: 7
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #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
Автор ответа:
 eragon



ICQ: 498-084-058 

Вопросов: 4
Ответов: 4
 Профиль | | #8 Добавлено: 09.04.08 14:05
Если строки не километровые

А если вес файла 500метров,в котором 30000 строк, длинной по 30000символов!!!Тогда что??

Ответить

Номер ответа: 9
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #9
Добавлено: 09.04.08 14:20
Тогда надо читать условие, которое сам и написал....
Есть файл, в нем 30 строк, надо 15ую строку заменить 30.

Если вес файла 500 метров, то тут уже будет немного другая техника.

Ответить

Номер ответа: 10
Автор ответа:
 eragon



ICQ: 498-084-058 

Вопросов: 4
Ответов: 4
 Профиль | | #10 Добавлено: 09.04.08 14:55
мне главное, чтоб навб6работало, и скорость, срочно нужно, плз

Ответить

Номер ответа: 11
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #11
Добавлено: 09.04.08 15:42
на больших файлах - маппинг и анализирование области памяти (число строк, нахождение 15 и 30 строк, их длин). потом формирование всех смещений, а потом уже переписывание, причем цельными кусками - считать строку 15, 30, сдвинуть большой кусок ниже 30 строки, если 15 не соответствует размеру, сдвинуть кусок между 15 и 30 строк, переписать строку 15, 30.

вся задача сводится к одному - позволить кешированию при чтении использоваться в полной мере, и предотвратить многочисленное асинхронное записывание, которое порождает потоки в системе (поэтому пишем максимальными блоками, которые позволят решить задачу)

Ответить

Номер ответа: 12
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #12
Добавлено: 09.04.08 23:29
Раскаль мегамоск=) Правильно мыслит, как всегда. А еще он активизировался на форуме... с чего бы?))))

Ответить

Номер ответа: 13
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #13
Добавлено: 10.04.08 00:24
да делать нефик =) погода г, вот и активизировался ;)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам