| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Файл в строку |
| Автор: Georg4 18.11.2003, 01:03 |
| Мне нужно все строки текстовгог файла слить в одну. Я делаю: while not eof(f) do begin readln(f,s); s1:=s1+s; richedit1.Lines.Add(s1); Оно выдает весь процесс записи. Т.е. сначала одну строку, потом две потом 3 и так прибавляя по одной строке. внимание,Ворос! Что делать? |
| Автор: Vit 18.11.2003, 02:52 | ||
|
| Автор: Dmitry V.Abramov 18.11.2003, 03:53 | ||
Ой... Лучше без "тяжелой артиллерии" в виде TStringList. Он ведь при чтении из файла сначала добросовестно распарсит все CRLF и уберет их. Потом при GetText снова добросовестно приклеит CRLF к каждой строчке... IMHO, проще и шустрее было бы примерно так:
|
| Автор: Paradox 18.11.2003, 07:10 | ||
А может так:
|
| Автор: Georg4 18.11.2003, 17:30 | ||
Это же то что я в начале сказал, это не получилась, а вункция Vit`a работает. Спасибо! И ещё вопрос, хочу в этой строке убрать все пробелы, пишу: for i:=0 to length(s) do s1:= copy (s,1,i); while s1 = ' ' do delete (s,1,i); Нифига! как? |
| Автор: DonPager 18.11.2003, 20:01 | ||
Для пробелов вот
тоже подойдёт для выкидывания CRLF (S[i] <> #13) |
| Автор: Dmitry V.Abramov 18.11.2003, 20:27 | ||||||||
Посмотри еще раз внимательно и найди одно отличие:
|
| Автор: Vit 18.11.2003, 21:52 | ||||
Но так лучше:
|
| Автор: Vit 18.11.2003, 21:55 | ||
Спорить не буду, тем более что наиболее оптимальным было бы просто считывание файла в буффер, просто мне так удобнее, я привык и часто использую TStringList. Хотя конечно могу привести ещё штук 10 совершенно различных способов чтения файлов... |
| Автор: Vit 18.11.2003, 21:57 | ||||
По поводу этого и других вариантов с ReadLn - имеют ограничеснное применение для очень больших или очень маленьких файлов. Для файлов размером от 1 кб до 20 мегабайт прочитывание всего файла в поток будет работать намного быстрее и эффективнее. |
| Автор: December 18.11.2003, 23:38 |
| [offtop] TStrings rules! Наверно, мой самый любимый инструмент. [/offtop] |
| Автор: Pakshin A. S. 19.11.2003, 19:49 | ||
А если в одну строчку:
Только ScrollBars должно быть ssBoth (для красоты) |
| Автор: Georg4 21.11.2003, 02:19 | ||
Обязательно учту!!:) Теперь я делаю чтоб провыеряло являются ли последние 2(или1) символа цифрами, и если нет то убрать оба(или тот кторый не цифра) |
| Автор: Guest 21.11.2003, 11:18 |
| Простые задачи должны иметь простые решения! Определяем строковую переменную (побольше) Определяем символьную переменную (под 1-н символ) организуем прорамму ... Читаем символ из файла Цикл пока - while (h = #10) OR (h = #13) then читаем сивол; ... Т.е. #10, #13 обозначают конец строки. Сейчас точно не помню. Загони в паскаль и на пошаговом троссировщике посмотри. И все! Ни каких танцев с бубном! Просто 1-н условный цикл. |
| Автор: Guest 21.11.2003, 11:21 |
| Простые задачи должны иметь простые решения! Определяем строковую переменную (побольше) - s Определяем символьную переменную (под 1-н символ) - h организуем прорамму ... Читаем символ из файла Цикл пока - while (h = #10) OR (h = #13) then читаем сивол; s:= s + h; Тут h уже точно не конец строки. ... загоняем s в файл. Т.е. #10, #13 обозначают конец строки. Сейчас точно не помню. Загони в паскаль и на пошаговом троссировщике посмотри. И все! Ни каких танцев с бубном! Просто 1-н условный цикл. |
| Автор: Paradox 21.11.2003, 12:42 |
| И сколько по твоему это будет работать с файлом килобайт на сорок |
| Автор: beif 22.11.2003, 09:10 |
| ДА, посимвольно рабоатать очень долго. Со строками гораздо быстрее и проще - TStrings рулит |
| Автор: Black_Joker 22.11.2003, 09:23 |
| За сколько партия прикажет - за столько и закончит. Зато предельно просто и предельно надежно. |