Вверх ↑
Этот топик читают: Гость
Ответов: 873
Рейтинг: 101
#1: 2009-02-19 10:02:18 ЛС | профиль | цитата
Задача простая если бы не файл весом почти 5 мб, есть ли способ не загружая весь файл выдрать заданную строку ?
карма: 1

0
Ответов: 1088
Рейтинг: 112
#2: 2009-02-19 10:18:43 ЛС | профиль | цитата
Если не знаеш где примерно эта строка то думаю без загрузки никак.
карма: 0
Время верстки: %cr_time% Текущее время: %time%
1
Голосовали:flud
Администрация
Ответов: 15295
Рейтинг: 1519
#3: 2009-02-19 10:21:24 ЛС | профиль | цитата
code_11855.txt
карма: 26
1
файлы: 1code_11855.txt [478B] [205]
Голосовали:flud
Ответов: 2125
Рейтинг: 159
#4: 2009-02-19 10:40:11 ЛС | профиль | цитата
Найти 5678-ую строку не просканировав файл от начала - невозможно. Исключение: в файл строки только добавляются, и у тебя есть индексный файл (массив позиций строк), который также дополняется в случае обнаружения увеличения размера файла. Если это делается только один раз, проще просканировать файл от начала, т.е. считывать по одной строке и подсчитывать их количество.
карма: 1

1
Голосовали:flud
Ответов: 873
Рейтинг: 101
#5: 2009-02-19 11:04:03 ЛС | профиль | цитата
Dilma идеально, но как мне указать строку 2,3,433 итд. и количество строк мне известно.
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#6: 2009-02-19 13:07:18 ЛС | профиль | цитата
flud писал(а):
но как мне указать строку 2,3,433

поставить счетчик и блок If
карма: 26
0
Ответов: 2125
Рейтинг: 159
#7: 2009-02-19 13:07:25 ЛС | профиль | цитата
flud, откуда же ты узнаёшь, какую строку по номеру тебе нужно считать?
карма: 1

0
Ответов: 873
Рейтинг: 101
#8: 2009-02-19 13:20:24 ЛС | профиль | цитата
tsdima писал(а):
flud, откуда же ты узнаёшь, какую строку по номеру тебе нужно считать?


мне не нужно определенную строку, я делаю рандом миниму 0, макс 67989
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#9: 2009-02-19 13:22:16 ЛС | профиль | цитата
лучше использовать БД для этих целей
карма: 26
0
Ответов: 2125
Рейтинг: 159
#10: 2009-02-19 13:37:42 ЛС | профиль | цитата
flud писал(а):
рандом

Ну тогда просто: перемещаешься на любой байт файла, читаешь (возможно) неполную строку, и затем ещё одну строку, которая и будет твоей рандомной строкой.
карма: 1

0
Ответов: 5227
Рейтинг: 587
#11: 2009-02-19 14:24:15 ЛС | профиль | цитата
flud, на васике можно примерно так code_11866.txt

за быстродействие не ручаюсь.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
файлы: 1code_11866.txt [1.2KB] [223]
Администрация
Ответов: 15295
Рейтинг: 1519
#12: 2009-02-19 15:43:25 ЛС | профиль | цитата
andrestudio, чем это отличается от того, что было дано в третьем посте?
карма: 26
0
Разработчик
Ответов: 26073
Рейтинг: 2122
#13: 2009-02-19 16:04:23 ЛС | профиль | цитата
А я бы проиндексировал файл


Add(MainForm,488216,280,196)
{
link(onCreate,9440801:doOpen,[])
}
Add(DataToFile,15459043,322,315)
{
Type=7
Point(Position)
Point(doPosition)
link(Stream,6939747:Var2,[(328,290)(356,290)])
}
Add(FileStream,9440801,350,210)
{
FileName="c:oot.ini"
}
Add(Button,8797593,273,420)
{
Left=140
Top=235
link(onClick,1723668:doEvent1,[])
}
Add(Memo,3862343,721,434)
{
Left=10
Top=5
Width=365
Height=130
}
Add(DoData,12443002,448,434)
{
link(onEventData,11946502:doWork2,[])
link(Data,16021109:Var3,[(454,366)])
}
Add(ListBox,12584935,525,434)
{
Left=10
Top=140
Width=120
Height=115
Point(String)
link(onClick,6058971:doData,[])
}
Add(Repeat,10335118,357,427)
{
Type=2
link(onRepeat,2934985:doEvent1,[])
link(Op1,9440801:Size,[])
link(Op2,16021109:Var2,[(370,399)(335,399)])
}
Add(GetDataEx,16021109,322,357)
{
link(Data,15459043:Position,[])
}
Add(Hub,2934985,413,427)
{
link(onEvent1,15459043:doGet,[(439,433)(439,381)(310,381)(310,328)])
link(onEvent2,12443002:doData,[])
}
Add(DoData,6058971,574,441)
{
link(onEventData,8377751:doEvent1,[])
link(Data,12584935:String,[(580,429)(566,429)(566,491)(552,491)])
}
Add(Hub,8377751,616,441)
{
OutCount=3
link(onEvent1,3862343:doClear,[])
link(onEvent2,221427:doPosition,[(640,454)(640,468)])
link(onEvent3,221427:doGet,[])
}
Add(Hub,1723668,322,420)
{
OutCount=3
link(onEvent1,8215156:doData,[(396,426)(396,391)])
link(onEvent2,10335118:doRepeat,[])
link(onEvent3,6353619:doOperation,[(347,440)(347,510)])
}
Add(DoData,8215156,455,385)
{
Data=Integer(0)
link(onEventData,11946502:doWork1,[(501,391)])
}
Add(HubEx,11946502,497,427)
{
link(onEvent,12584935:doAdd,[])
}
Add(Math,6353619,448,504)
{
OpType=1
Op2=1
ResultType=0
link(onResult,12584935:doDelete,[(499,510)(499,454)])
link(Op1,12584935:Count,[(454,492)(538,492)])
}
Add(DataToFile,221427,665,448)
{
Type=7
Point(Position)
Point(doPosition)
link(onGet,3862343:doAdd,[(709,454)(709,440)])
link(Stream,6939747:Var3,[(671,261)])
}
Add(GetDataEx,6939747,343,252)
{
link(Data,9440801:Stream,[])
}

карма: 22

0
Ответов: 5227
Рейтинг: 587
#14: 2009-02-19 16:30:03 ЛС | профиль | цитата
Dilma писал(а):
чем это отличается от того, что было дано в третьем посте?

Решением, VBJScript такой же штатный элемент. Во вторых, в цикле у меня строки пропускаются (не считываются) а выводится только индексная строка.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Администрация
Ответов: 15295
Рейтинг: 1519
#15: 2009-02-19 16:58:09 ЛС | профиль | цитата
andrestudio писал(а):
в цикле у меня строки пропускаются (не считываются)

определить конец строки не возможно, не считав ее целиком.

tsdima писал(а):
Найти 5678-ую строку не просканировав файл от начала - невозможно. Исключение: в файл строки только добавляются, и у тебя есть индексный файл (массив позиций строк)

карма: 26
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)