|
|
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
Долго читается файл и как это убыстрить Файл весит примерно 500 кб. Мне нужно в нем выбрать только те строчки которые начинаются с "-" и меньше по длине 100 Пишу такую вещь...: ifstream File; char str[100]; File.open("Test.txt", ios::in); while (!File.eof()) { File.getline(str, sizeof(str)); if (strlen(str) < 100 && str[0] == '-') { Memo1->Lines->Add(str); } } File.close(); Заранее спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 15:46 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
Зачем так мучится ?! я просто юзал TStringList все уже за нас написанно . ш (';') (V),(V),, Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 15:47 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
Какая разница куда выводить...))) У меня есть файл, в нем есть пара строчек начинающихся с "-" Нужно пробежаться по нему и вывести строки начинающие на символ "-" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 16:19 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
ну дык и запихай его в какойнить буффер а там уже ищи , эти символы ну или байты ш (';') (V),(V),, Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 16:24 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
а ещё (если винда) можно смапить память на файл, ходить как по памяти и никаких буферов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 16:27 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
да и если не винда ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 16:32 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
'FaTsO' , а "Долго читается файл 500 кб" - это сколько?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 16:33 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
--null--'FaTsO' , а "Долго читается файл 500 кб" - это сколько?? Если например запись начинающаяся на "-" первая в файле то в Мемо попадает сразу Потом долго думает и зависает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 16:40 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
zalexakaа ещё (если винда) можно смапить память на файл, ходить как по памяти и никаких буферов не умею так делать по этому и не предлогаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 16:49 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
IMHO: автор ifstream File; char str[100]; File.open("Test.txt", ios::in); while (!File.eof()) { File.getline(str, sizeof(str)); if (strlen(str) < 100 && str[0] == '-') { Memo1->Lines->Add(str); } } File.close(); не кажется ли это странным???? У Вас буфер [100] изначально, а потом Вы получается столько же засасываете из файла и зачем-то сравниваете с длиной. Что будет тут со строчками длинее 100? Мало того, что тут сравнивать бесполезно будет - Ваша программа зависнет, встретив первую же строчку со strlen() более 100! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 16:50 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
На самом деле вопрос этот вот к чему... Я записываю несколько файлов в один...))) можно в начале файла записать таблицу файлов типа: -1.jpg 123454 -2.jpg 437277 байты файлов Или это можно сделать так: -1.jpg 123454 байты файла -2.jpg 437277 байты файла Тогда читать сложно...((( Далее возникло желание дозаписать в файл чего нить Для таблицы: Тогда читать легко и быстро. А дозаписывать сложно...Как узнать конец этой таблицы Для втрого случая: читать сложно и зависает. А дозаписывать легко и непринужденно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 16:50 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
Можно сделать так char str[200]; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 16:51 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
Все равно висьнет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 16:52 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
char str[200] это мало. Тут в теории буфер дролжен быть не меньше файла самого, так как неизвестно, какой длины строка попадется. Зависает из-за малой длины буфера (и в getline есессна тоже длину тоже такую поставьте) 200 чаров в Вашем случае - что слону дробина! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 16:58 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
Иначе можно поставить вопрос как записать строку в конец этой таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 16:59 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
только так очевидно, в файл не вставишь, не подвинув все остальное. Вы выбрали втрой случай видать. Я так понимаю, Вы getline делаете в том числе с данными файла. А кстати ПОСЛЕ байтов файла у Вас вставлен символ конца строки, чтобы getline() отработал корректно? Это очень важно. И еще: учитывате ли Вы, что в любом случае теоретически возможна ситуация, когда строка==ВЕСЬ файл, поэтому я и советую буфер побольше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 17:06 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
Иначе говоря, Ваша схема -1.jpg 123454[\n] байты файла[\n] -2.jpg 437277[\n] байты файла[\n] - все ОК -1.jpg 123454[\n] байты файчычычы[\n]чфычыла[\n] -2.jpg 437277[\n] байты фhgnh[\n]nghnhайла[\n] - все ОК -1.jpg 123454[\n] байты файчычычы ~[более 200 символов]~чфычыла[\n] -2.jpg 437277[\n] байты фhgnh[\n]nghnhайла[\n] - Зависнет! -1.jpg 123454[\n] байты файла -2.jpg 437277[\n] байты файла[\n] - Зависнет! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 17:10 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
--null--только так очевидно, в файл не вставишь, не подвинув все остальное. Вы выбрали втрой случай видать. Я так понимаю, Вы getline делаете в том числе с данными файла.quot] Конечно иначе то никак file.eof() никак не может исключать байты файла. [quot --null--]А кстати ПОСЛЕ байтов файла у Вас вставлен символ конца строки, чтобы getline() отработал корректно? Это очень важно. Я сделал так если файл сущетсвует то в начале и в конце вводимой строки пишется "\r\n" Если файл не существует то в конце только "\r\n" --null--И еще: учитывате ли Вы, что в любом случае теоретически возможна ситуация, когда строка==ВЕСЬ файл, поэтому я и советую буфер побольше. Нет так как строка всего 200 символов и больше в нее не поместится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 17:16 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
у меня так -1.jpg 123454[\n]байты файла[\n]-2.jpg 437277[\n]байты файла[\n] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 17:18 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
Да нет же, когда будете читать байты файла - она запросто вылезет в космос. Кстати, я так понимаб это все же бинарник (.jpg),. в нем ведь может попасться скажем символ с кодом 0? При этом строка обрежется, когда ее getline(). И испортится. Но для выборки строк "-1.jpg 123454" это наверное пофигу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 17:26 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
--null--Да нет же, когда будете читать байты файла - она запросто вылезет в космос. Какая разница все равно в файл записывается -1.jpg 123454[\n] байты файла[\n] -2.jpg 437277[\n] байты файла[\n] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 17:33 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
Все равно сделав -1.jpg 123454[\n] байты файла[\n] -2.jpg 437277[\n] байты файла[\n] зависает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 17:37 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
такая она эта getline() - если Вы меньше, чем реальная длина, то в приведенной проге eof() просто не наступит никогда. Во всяком случае мне так кажется :-) Дабы развеять сомнение, попробуйте с большим буфером. В идеале следовало бы сначала вычислить "наибольшую длину строки" для данного файла (наибольшее расстояние между \n) и на ее основе делать буфер и читать getline() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 17:49 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
Попробуй наподобие как: #include <iostream.h> #include <fstream.h> #include <conio.h> #include <string.h> int main(){ ifstream File("Test.txt",ios::in); ofstream OFile("Out.txt",ios::out); char str[100]; while (!File.eof()){ memset(str,0,sizeof(str)); File.getline(str,sizeof(str)); if ((strlen(str)<100)&&(str[0]=='-')){ OFile<<str<<endl; }; }; return 0; }; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2004, 10:19 |
|
||
|
Долго читается файл!!! и зависает
|
|||
|---|---|---|---|
|
#18+
--null--, привет, тезка! Автору топика: лучше переходите полностью на C++ standard library и бзайте string, у ВАс Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2004, 14:26 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32763719&tid=2034145]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 272ms |
| total: | 432ms |

| 0 / 0 |
