Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.06.2011, 21:26
jekahm jekahm вне форума
Новичок
 
Регистрация: 01.06.2009
Сообщения: 54
Репутация: 27
По умолчанию Чтение из txt

Доброго времени суток!
Столкнулся с такой вот проблемой!
Есть код, который выводит список текстовых файлов определённой папки в ListBox:

Код:
Procedure ScanDir(StartDir: String; Mask:string; List:TStrings);
Var SearchRec : TSearchRec;
Begin
  IF Mask ='' then Mask:= '*.txt*';
  IF StartDir[Length(StartDir)] <> '\' then StartDir := StartDir + '\';
  IF FindFirst(StartDir+Mask, faAnyFile, SearchRec) = 0 then
    Begin
     Repeat
      Application.ProcessMessages;
      IF (SearchRec.Attr and faDirectory) <> faDirectory then 
         List.Add(SearchRec.Name) else
          IF (SearchRec.Name <> '..') and (SearchRec.Name <> '.') then
        Begin
          List.Add(StartDir + SearchRec.Name + '\');
          ScanDir(StartDir + SearchRec.Name + '\',Mask,List);
        End;
     Until FindNext(SearchRec) <> 0;
     FindClose(SearchRec);
   End;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.Clear;
  ScanDir(ExtractFilePath(ParamStr(0)),'',ListBox1.Items);
  Label1.Caption := IntToStr(ListBox1.Items.Count);
end;

Что необходимо сделать, чтобы вывести содержимое текстового файла (например, в RichEdit), который выделен в ListBox?
Заранее благодарен!
Ответить с цитированием
  #2  
Старый 14.06.2011, 21:37
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

Код:
var
fL:TextFile;
TMP:String;
begin
AssignFile(fL,ListBox1.Items[ListBox1.ItemIndex]);
Reset(fL);
while not eof(fL) do
   begin
      Readln(fL,TMP);
      RichEdit1.Lines.Add(TMP);
   end;
end
Ответить с цитированием
  #3  
Старый 15.06.2011, 00:21
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Не знаю насчет RichEdit, но в Memo есть замечательный метод Memo1.LoadFromFile(Filename); Думаю, в RE тоже должен быть.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #4  
Старый 15.06.2011, 01:13
jekahm jekahm вне форума
Новичок
 
Регистрация: 01.06.2009
Сообщения: 54
Репутация: 27
По умолчанию

Цитата:
Сообщение от ChinYan
Код:
var
fL:TextFile;
TMP:String;
begin
AssignFile(fL,ListBox1.Items[ListBox1.ItemIndex]);
Reset(fL);
while not eof(fL) do
   begin
      Readln(fL,TMP);
      RichEdit1.Lines.Add(TMP);
   end;
end
Спасибо Вам большое!
Ответить с цитированием
  #5  
Старый 15.06.2011, 01:28
jekahm jekahm вне форума
Новичок
 
Регистрация: 01.06.2009
Сообщения: 54
Репутация: 27
По умолчанию

Вот еще появился вопрос такого характера!
Теперь я пытаюсь сохранить файл из RichEdit в txt, используя вот такой вот код:

Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  f: file;
  s: string;
begin
s := RichEdit1.Text;
RichEdit1.PlainText:=True;
  AssignFile(f, 'text.txt');
  Rewrite(f);
  BlockWrite(f, PChar(s)^, Length(s));
  CloseFile(f);
end;

Но в созданном txt файле показуется куча непонятных символов! Как этого можно избежать? Может есть какое-то форматирование?
Ответить с цитированием
  #6  
Старый 15.06.2011, 03:48
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Код:
  // не так
  BlockWrite(f, PChar(s)^, Length(s));
  // так
  Write(f, s);
Ответить с цитированием
  #7  
Старый 15.06.2011, 23:17
jekahm jekahm вне форума
Новичок
 
Регистрация: 01.06.2009
Сообщения: 54
Репутация: 27
По умолчанию

Цитата:
Сообщение от angvelem
Код:
  // не так
  BlockWrite(f, PChar(s)^, Length(s));
  // так
  Write(f, s);
На эту строчку Delphi начинает материться!
Ответить с цитированием
  #8  
Старый 16.06.2011, 00:26
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Файл должен быть формата text
Код:
var f:text;
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #9  
Старый 16.06.2011, 02:15
jekahm jekahm вне форума
Новичок
 
Регистрация: 01.06.2009
Сообщения: 54
Репутация: 27
По умолчанию

Цитата:
Сообщение от Bargest
Файл должен быть формата text
Код:
var f:text;
Спасибо, работает!

Последний раз редактировалось jekahm, 16.06.2011 в 02:27.
Ответить с цитированием
  #10  
Старый 16.06.2011, 02:26
jekahm jekahm вне форума
Новичок
 
Регистрация: 01.06.2009
Сообщения: 54
Репутация: 27
По умолчанию

Цитата:
Сообщение от ChinYan
Код:
var
fL:TextFile;
TMP:String;
begin
AssignFile(fL,ListBox1.Items[ListBox1.ItemIndex]);
Reset(fL);
while not eof(fL) do
   begin
      Readln(fL,TMP);
      RichEdit1.Lines.Add(TMP);
   end;
end
Появилась такая проблема: почему-то в RichEdit выводится только первая строка текстового файла! В чем может быть проблема?
Ответить с цитированием
  #11  
Старый 16.06.2011, 02:53
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

ReadLn предполагает, что файл разбит на строки и читает построчно. Смотри какой у тебя текстовый файл, в данном случае, исходя из твоих слов, у тебя файл состоит из одной строки.

Последний раз редактировалось angvelem, 16.06.2011 в 02:55.
Ответить с цитированием
  #12  
Старый 16.06.2011, 02:58
jekahm jekahm вне форума
Новичок
 
Регистрация: 01.06.2009
Сообщения: 54
Репутация: 27
По умолчанию

Цитата:
Сообщение от angvelem
ReadLn предполагает, что файл разбит на строки и читает построчно. Смотри какой у тебя текстовый файл, в данном случае, исходя из твоих слов, у тебя файл состоит из одной строки.
Файл состоит из нескольких строк!
А вы пробовали, у вас работает? Просто может только у меня проблема!
Ответить с цитированием
  #13  
Старый 16.06.2011, 03:00
jekahm jekahm вне форума
Новичок
 
Регистрация: 01.06.2009
Сообщения: 54
Репутация: 27
По умолчанию

Кстати, если быть точным, то считывается не первая, а последняя строка!
Ответить с цитированием
  #14  
Старый 16.06.2011, 03:13
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Приводи код, который читает текстовый файл. Смотри http://www.delphisources.ru/forum/sh...78&postcount=2
Если вот это:
Код:
AssignFile(fL,ListBox1.Items[ListBox1.ItemIndex]);
файл из которого читается, то, чему удивляться.

Последний раз редактировалось angvelem, 16.06.2011 в 03:27.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:12.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter