Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Файл в строку 
:(
    Опции темы
Georg4
Дата 18.11.2003, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: 0
Всего: 10



Мне нужно все строки текстовгог файла слить в одну. Я делаю:
while not eof(f) do
begin
readln(f,s);
s1:=s1+s;
richedit1.Lines.Add(s1);
Оно выдает весь процесс записи. Т.е. сначала одну строку, потом две потом 3 и так прибавляя по одной строке.
внимание,Ворос!
Что делать?


--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
Vit
Дата 18.11.2003, 02:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Код
Function ReadFileAsString(FileName:string; LeaveStringSeparators:boolean=True):string;
begin
 With TStringList.create do
   try
     LoadFromFile(FileName);
     Result:=text;
   finally
     Free;
   end;
 if not LeaveStringSeparators then
   begin
      Result:=StringReplace(Result, #13, '', [rfReplaceAll]);
      Result:=StringReplace(Result, #10, '', [rfReplaceAll]);
   end;
end;



--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Dmitry V.Abramov
Дата 18.11.2003, 03:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 30.9.2003
Где: Saint-Petersburg

Репутация: 5
Всего: 4



Ой... Лучше без "тяжелой артиллерии" в виде TStringList. Он ведь при чтении из файла сначала добросовестно распарсит все CRLF и уберет их. Потом при GetText снова добросовестно приклеит CRLF к каждой строчке... IMHO, проще и шустрее было бы примерно так:
Код
Function ReadFileAsString(FileName:string; LeaveStringSeparators:boolean=True): string;
begin
 With TFileStream.Create(FileName, fmOpenRead) do try
   SetLength(Result, Size);
   if Result <> '' then Read(Result[1], Size);
 finally
   Free;
 end;

 if not LeaveStringSeparators then begin
   Result:=StringReplace(Result, #13, '', [rfReplaceAll]);
   Result:=StringReplace(Result, #10, '', [rfReplaceAll]);
 end;
end;

--------------------
/DVA
PM MAIL WWW   Вверх
Paradox
Дата 18.11.2003, 07:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: нет
Всего: 1



А может так:
Код
while not eof(f) do
begin
readln(f,s);
s1:=s1+s;
end
richedit1.Lines.Add(s1);


Это сообщение отредактировал(а) Paradox - 18.11.2003, 07:11


--------------------
---
PM MAIL WWW   Вверх
Georg4
Дата 18.11.2003, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: 0
Всего: 10



Цитата
А может так:CODE 
while not eof(f) do
begin
readln(f,s);
s1:=s1+s;
end
richedit1.Lines.Add(s1);

Это же то что я в начале сказал, это не получилась, а вункция Vit`a работает. Спасибо!

И ещё вопрос, хочу в этой строке убрать все пробелы, пишу:
for i:=0 to length(s) do
s1:= copy (s,1,i);
while s1 = ' ' do
delete (s,1,i);

Нифига!
как?


--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
DonPager
Дата 18.11.2003, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Колдырь
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 28.3.2003
Где: Воронеж

Репутация: нет
Всего: 2



Для пробелов вот
Код

i := 1;
S1 := '';
while i<= length(s)do
begin
 if S[i]<> ' ' then S1 := S1 + S[i];
 Inc(i);
end;

тоже подойдёт для выкидывания CRLF (S[i] <> #13)


--------------------
кодер + лодырь = колдырь
PM MAIL ICQ Skype GTalk   Вверх
Dmitry V.Abramov
Дата 18.11.2003, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 30.9.2003
Где: Saint-Petersburg

Репутация: 5
Всего: 4



Цитата(Georg4 @ 18.11.2003, 17:30)
Цитата
А может так:CODE 
while not eof(f) do
begin
readln(f,s);
s1:=s1+s;
end
richedit1.Lines.Add(s1);

Это же то что я в начале сказал, это не получилась,

Посмотри еще раз внимательно и найди одно отличие:
Код
while not eof(f) do
begin
 readln(f,s);
 s1:=s1+s;
 richedit1.Lines.Add(s1);

Код
while not eof(f) do
begin
 readln(f,s);
 s1:=s1+s;
end
richedit1.Lines.Add(s1);

--------------------
/DVA
PM MAIL WWW   Вверх
Vit
Дата 18.11.2003, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(Georg4 @ 18.11.2003, 08:30)
пробелы, пишу:
for i:=0 to length(s) do
s1:= copy (s,1,i);
while s1 = ' ' do
delete (s,1,i); // - Ошибка здесь, надо delete (s1,1,i);

Нифига!
как?


Но так лучше:

Код
s1:=StringReplace(s,' ','',[rfReplaceAll]);



--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Vit
Дата 18.11.2003, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(Dmitry @ 17.11.2003, 18:53)
Ой... Лучше без "тяжелой артиллерии" в виде TStringList.

Спорить не буду, тем более что наиболее оптимальным было бы просто считывание файла в буффер, просто мне так удобнее, я привык и часто использую TStringList. Хотя конечно могу привести ещё штук 10 совершенно различных способов чтения файлов...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Vit
Дата 18.11.2003, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(Paradox @ 17.11.2003, 22:10)
А может так:
Код
while not eof(f) do
begin
readln(f,s);
s1:=s1+s;
end
richedit1.Lines.Add(s1);

По поводу этого и других вариантов с ReadLn - имеют ограничеснное применение для очень больших или очень маленьких файлов. Для файлов размером от 1 кб до 20 мегабайт прочитывание всего файла в поток будет работать намного быстрее и эффективнее.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
December
Дата 18.11.2003, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 8
Всего: 57



[offtop]
TStrings rules! Наверно, мой самый любимый инструмент.
[/offtop]


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Pakshin A. S.
Дата 19.11.2003, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



А если в одну строчку:
Код

RichEdit1.Lines.LoadFromFile(FileName);

Только ScrollBars должно быть ssBoth (для красоты)
PM   Вверх
Georg4
Дата 21.11.2003, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: 0
Всего: 10



Цитата
Только ScrollBars должно быть ssBoth (для красоты)


Обязательно учту!!:)
Теперь я делаю чтоб провыеряло являются ли последние 2(или1) символа цифрами, и если нет то убрать оба(или тот кторый не цифра)


--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
Guest
Дата 21.11.2003, 11:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Простые задачи должны иметь простые решения!

Определяем строковую переменную (побольше)
Определяем символьную переменную (под 1-н символ)

организуем прорамму
...
Читаем символ из файла
Цикл пока - while (h = #10) OR (h = #13) then читаем сивол;
...
Т.е. #10, #13 обозначают конец строки.

Сейчас точно не помню. Загони в паскаль и на пошаговом троссировщике посмотри.

И все! Ни каких танцев с бубном! Просто 1-н условный цикл.
  Вверх
Guest
Дата 21.11.2003, 11:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Простые задачи должны иметь простые решения!

Определяем строковую переменную (побольше) - s
Определяем символьную переменную (под 1-н символ) - h

организуем прорамму
...
Читаем символ из файла
Цикл пока - while (h = #10) OR (h = #13) then читаем сивол;
s:= s + h;
Тут h уже точно не конец строки.
...
загоняем s в файл.

Т.е. #10, #13 обозначают конец строки.

Сейчас точно не помню. Загони в паскаль и на пошаговом троссировщике посмотри.

И все! Ни каких танцев с бубном! Просто 1-н условный цикл.
  Вверх
Paradox
Дата 21.11.2003, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: нет
Всего: 1



И сколько по твоему это будет работать с файлом килобайт на сорок


--------------------
---
PM MAIL WWW   Вверх
beif
Дата 22.11.2003, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 25.8.2003
Где: Россия, Кемерово

Репутация: нет
Всего: 1



ДА, посимвольно рабоатать очень долго. Со строками гораздо быстрее и проще - TStrings рулит smile.gif
PM MAIL WWW ICQ   Вверх
Black_Joker
Дата 22.11.2003, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 9.11.2002
Где: Таганрог

Репутация: нет
Всего: нет



За сколько партия прикажет - за столько и закончит.
Зато предельно просто и предельно надежно.

PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0613 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.