Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Долго читается файл!!! и зависает / 25 сообщений из 26, страница 1 из 2
01.11.2004, 15:46
    #32763446
'FaTsO'
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
Долго читается файл и как это убыстрить
Файл весит примерно 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();

Заранее спасибо
...
Рейтинг: 0 / 0
01.11.2004, 15:47
    #32763452
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
Зачем так мучится ?!

я просто юзал TStringList
все уже за нас написанно .



 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
01.11.2004, 16:19
    #32763549
'FaTsO'
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
Какая разница куда выводить...)))

У меня есть файл, в нем есть пара строчек
начинающихся с "-"
Нужно пробежаться по нему и вывести строки
начинающие на символ "-"
...
Рейтинг: 0 / 0
01.11.2004, 16:24
    #32763572
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
ну дык и запихай его в какойнить буффер а там уже ищи ,
эти символы ну или байты


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
01.11.2004, 16:27
    #32763585
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
а ещё (если винда) можно смапить память на файл, ходить как по памяти и никаких буферов
...
Рейтинг: 0 / 0
01.11.2004, 16:32
    #32763605
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
да и если не винда ;-)
...
Рейтинг: 0 / 0
01.11.2004, 16:33
    #32763608
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
'FaTsO' , а "Долго читается файл 500 кб" - это сколько??
...
Рейтинг: 0 / 0
01.11.2004, 16:40
    #32763628
'FaTsO'
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
--null--'FaTsO' , а "Долго читается файл 500 кб" - это сколько??
Если например запись начинающаяся на "-" первая в файле то
в Мемо попадает сразу
Потом долго думает и зависает
...
Рейтинг: 0 / 0
01.11.2004, 16:49
    #32763653
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
zalexakaа ещё (если винда) можно смапить память на файл, ходить как по памяти и никаких буферов

не умею так делать по этому и не предлогаю
...
Рейтинг: 0 / 0
01.11.2004, 16:50
    #32763654
---null--
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
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!
...
Рейтинг: 0 / 0
01.11.2004, 16:50
    #32763657
'FaTsO'
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
На самом деле вопрос этот вот к чему...
Я записываю несколько файлов в один...)))
можно в начале файла записать таблицу файлов
типа:
-1.jpg 123454
-2.jpg 437277
байты файлов
Или это можно сделать так:
-1.jpg 123454
байты файла
-2.jpg 437277
байты файла
Тогда читать сложно...(((
Далее возникло желание дозаписать в файл чего нить
Для таблицы: Тогда читать легко и быстро. А дозаписывать сложно...Как узнать конец этой таблицы
Для втрого случая: читать сложно и зависает. А дозаписывать легко и непринужденно
...
Рейтинг: 0 / 0
01.11.2004, 16:51
    #32763662
'FaTsO'
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
Можно сделать так

char str[200];
...
Рейтинг: 0 / 0
01.11.2004, 16:52
    #32763664
'FaTsO'
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
Все равно висьнет
...
Рейтинг: 0 / 0
01.11.2004, 16:58
    #32763687
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
char str[200] это мало.
Тут в теории буфер дролжен быть не меньше файла самого, так как неизвестно,
какой длины строка попадется.
Зависает из-за малой длины буфера (и в getline есессна тоже длину тоже такую поставьте)
200 чаров в Вашем случае - что слону дробина!
...
Рейтинг: 0 / 0
01.11.2004, 16:59
    #32763689
'FaTsO'
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
Иначе можно поставить вопрос как записать строку в конец этой таблицы
...
Рейтинг: 0 / 0
01.11.2004, 17:06
    #32763706
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
только так очевидно, в файл не вставишь, не подвинув все остальное.
Вы выбрали втрой случай видать.
Я так понимаю, Вы getline делаете в том числе с данными файла.
А кстати ПОСЛЕ байтов файла у Вас вставлен символ конца строки, чтобы
getline() отработал корректно? Это очень важно.
И еще: учитывате ли Вы, что в любом случае теоретически возможна ситуация,
когда строка==ВЕСЬ файл, поэтому я и советую буфер побольше.
...
Рейтинг: 0 / 0
01.11.2004, 17:10
    #32763719
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
Иначе говоря, Ваша схема

-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]

- Зависнет!
...
Рейтинг: 0 / 0
01.11.2004, 17:16
    #32763739
'FaTsO'
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
--null--только так очевидно, в файл не вставишь, не подвинув все остальное.
Вы выбрали втрой случай видать.
Я так понимаю, Вы getline делаете в том числе с данными файла.quot]
Конечно иначе то никак file.eof() никак не может исключать байты файла.
[quot --null--]А кстати ПОСЛЕ байтов файла у Вас вставлен символ конца строки, чтобы getline() отработал корректно? Это очень важно.
Я сделал так если файл сущетсвует то в начале и в конце вводимой строки
пишется "\r\n"
Если файл не существует то в конце только "\r\n"
--null--И еще: учитывате ли Вы, что в любом случае теоретически возможна ситуация,
когда строка==ВЕСЬ файл, поэтому я и советую буфер побольше.
Нет так как строка всего 200 символов и больше в нее не поместится
...
Рейтинг: 0 / 0
01.11.2004, 17:18
    #32763741
'FaTsO'
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
у меня так
-1.jpg 123454[\n]байты файла[\n]-2.jpg 437277[\n]байты файла[\n]
...
Рейтинг: 0 / 0
01.11.2004, 17:26
    #32763767
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
Да нет же, когда будете читать байты файла - она запросто вылезет в космос.

Кстати, я так понимаб это все же бинарник (.jpg),.
в нем ведь может попасться скажем символ с кодом 0?
При этом строка обрежется, когда ее getline(). И испортится.

Но для выборки строк "-1.jpg 123454" это наверное пофигу.
...
Рейтинг: 0 / 0
01.11.2004, 17:33
    #32763783
'FaTsO'
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
--null--Да нет же, когда будете читать байты файла - она запросто вылезет в космос.
Какая разница все равно в файл записывается
-1.jpg 123454[\n]
байты файла[\n]
-2.jpg 437277[\n]
байты файла[\n]
...
Рейтинг: 0 / 0
01.11.2004, 17:37
    #32763794
'FaTsO'
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
Все равно сделав
-1.jpg 123454[\n]
байты файла[\n]
-2.jpg 437277[\n]
байты файла[\n]
зависает
...
Рейтинг: 0 / 0
01.11.2004, 17:49
    #32763820
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
такая она эта getline() - если Вы меньше, чем реальная длина,
то в приведенной проге eof() просто не наступит никогда.
Во всяком случае мне так кажется :-)
Дабы развеять сомнение, попробуйте с большим буфером.
В идеале следовало бы сначала вычислить "наибольшую длину строки"
для данного файла (наибольшее расстояние между \n) и на ее основе делать буфер и читать getline()
...
Рейтинг: 0 / 0
05.11.2004, 10:19
    #32770027
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
Попробуй наподобие как:

#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;
};
...
Рейтинг: 0 / 0
05.11.2004, 14:26
    #32770744
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Долго читается файл!!! и зависает
--null--, привет, тезка!

Автору топика: лучше переходите полностью на C++ standard library
и бзайте string, у ВАс

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#include<fstream>
#include<iostream>
#include<string>
using namespace std;

main()
{

ifstream File;
string str;
File.open("test.txt");
 while (!File.eof())
 {
  getline(File,str);
  cout<<str<<endl;
 }

}
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Долго читается файл!!! и зависает / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]