Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Чтение файла [D7, XP]


Страницы:   1 2

allucard ©   (2007-04-17 11:50:00) 

Доброго дня.
Есть файл - одна строка текста(слов, отделённых пробелами), длинной в 12000 симв.
Как проще эту строку преобразовать в массив слов?
Или другими словами: в какой тип лучше сначала записать эту строку и есть ли спец. функции преобразования?

Делаю пока так:

   FileStream:= TFileStream.Create('C:\123.txt', fmOpenRead);
   FileStream.ReadBuffer(Buffer, 65535);
   FileStream.Free;

Спасибо.


Сергей М.   (2007-04-17 14:37:00) [1]


> ура


В твоем случае это пока еще смахивает на "голым задом на амбразуру")


allucard   (2007-04-17 14:34:00) [2]


> Сергей М. ©   (17.04.07 14:25) [27]

Respect и ура.
Теперь догнал как это работает.
Вопросов нет.


Сергей М.   (2007-04-17 14:25:00) [3]

StringList:= TStringList.Create;
StringList.LoadFromFile(..);
StringList.Delimiter := ' ';
StringList.DelimitedText := StringList.Text;
for i := StringList.Count - 1 downto 0 do
if StringList[i] = '' then StringList.Delete(i);
Memo1.Lines := StringList;
StringList.Free;


allucard   (2007-04-17 14:15:00) [4]


> Сергей М. ©   (17.04.07 14:00) [25]

Нули были в файле, я их удалил в Hex редакторе, нулей теперь нет.
Файл теперь текстовый.

Вот так читаю файл(код см. ниже), он читается, и выводится в Memo1 всего одной длинной строкой(состоящей из слов отделённых пробелами), а мне нужно чтоб эта строка преобразовалась в список строк, и в каждой этой строке было одно слово (соответственно пробелы удалились).

StringList:= TStringList.Create;
StringList.DelimitedText :=' ';
StringList.Delimiter :=chr(20);
 if (FileExists(OpenDialog1.FileName)) then
   begin
     StringList.LoadFromFile(OpenDialog1.FileName);
   end;
Memo1.Clear;
Memo1.Lines.AddStrings(StringList);
StringList.Free;


Сергей М.   (2007-04-17 14:00:00) [5]


> allucard   (17.04.07 13:54) [23]


Так у тебя текстовый файл или не текстовый ?
Откуда в текстовом файле взялись "нули" ?
Нет и не должно быть в текстовом файле нулей, по кр.мере в ANSI-кодировке.


Virgo_Style   (2007-04-17 13:55:00) [6]

особенно "строка любых данных" меня интересует


allucard   (2007-04-17 13:54:00) [7]


> Сергей М. ©   (17.04.07 13:48) [22]

Ну опечатался.

Строка текста в которой слова отделены пробелами,
а нужны строки текста со словами, без пробелов.


Сергей М.   (2007-04-17 13:48:00) [8]


> этот бред


А иначе как бредом это и не назовешь)

То у тебя


> строка текста(слов, отделённых пробелами)


то вдруг


> строкам слова (от 1 до 20 пробелов между строками)


Ты уж бросай курить траву и определись наконец, что у тебя есть "строка", что есть "слово", что есть "строка слова" и пр. и пр.

)


allucard   (2007-04-17 13:38:00) [9]

уже пока не нужно удалять этот бред. Ручками удалю.
Как правильно это установить, чтоб по строкам слова (от 1 до 20 пробелов между строками) разбрасывало, а то всё в одну бросает:


StringList:= TStringList.Create;
StringList.Delimiter:=' ';
StringList.DelimitedText :='';
if (FileExists(OpenDialog1.FileName)) then
  begin
    FileStream:= TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
    StringList.LoadFromStream(FileStream);
    FileStream.Free;
  end;
Memo1.Lines.AddStrings(StringList);
StringList.Free;


Reindeer Moss Eater   (2007-04-17 13:35:00) [10]

в школу.


allucard   (2007-04-17 13:31:00) [11]


> Virgo_Style ©   (17.04.07 13:30) [18]

строки


Virgo_Style   (2007-04-17 13:30:00) [12]

var buf: array of byte;//char, integer, ...


allucard   (2007-04-17 13:28:00) [13]


> Ты удивишься, но компьютер другой системы счисления кроме
> двоичной не знает.

Я бы удивился, если бы та понял что я спрашиваю :)

Как описывать переменную, которая содержит строки просто данных(не текстовых), а вообще любых?


Reindeer Moss Eater   (2007-04-17 13:28:00) [14]

PChar,StrLen,Операция сложения и цикл.


allucard   (2007-04-17 13:25:00) [15]

Ну пока упростим.
Всего лишь нужно ручками удалить этот бред, правдо файлов около 15000, но пока с одним.

Всёравно открывает текст, и запихивает содержимое в один string.

Может я не так разделитель поставил.
вот дамп текста (от 1 до 20 пробелов между строками) как правильно установить delimiter?

33 31 2D 30 31 20 20 20      20 20 20 20 20 20 20 20
20 20 33 31 ...


Плохиш   (2007-04-17 13:23:00) [16]


> Какой класс или переменная работает с двоичной системой?

Ты удивишься, но компьютер другой системы счисления кроме двоичной не знает.


allucard   (2007-04-17 13:14:00) [17]

Как описать это?
Какой класс или переменная работает с двоичной системой?


Плохиш   (2007-04-17 13:09:00) [18]


> allucard   (17.04.07 13:06) [9]
> Я так понял тут StringList не поможет?
>
> Тогда что?

Цикл for поможет, к примеру...


Reindeer Moss Eater   (2007-04-17 13:08:00) [19]

Тогда что?

Обработка области памяти. Деление на куски по нулевому байту.


Reindeer Moss Eater   (2007-04-17 13:07:00) [20]

кстати зачем вообще нужен был файлстрим если у стринглиста есть метод загрузки из файла?

Надеялся с помощью этого наколоть судьбу и работать с двоичкой как с текстом?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо