![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Чтение файла [D7, XP]
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]кстати зачем вообще нужен был файлстрим если у стринглиста есть метод загрузки из файла?
Надеялся с помощью этого наколоть судьбу и работать с двоичкой как с текстом?