Форум: "Начинающим";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];
ВнизЧтение файла Найти похожие ветки
← →
allucard (2007-04-17 11:50) [0]Доброго дня.
Есть файл - одна строка текста(слов, отделённых пробелами), длинной в 12000 симв.
Как проще эту строку преобразовать в массив слов?
Или другими словами: в какой тип лучше сначала записать эту строку и есть ли спец. функции преобразования?
Делаю пока так:
FileStream:= TFileStream.Create("C:\123.txt", fmOpenRead);
FileStream.ReadBuffer(Buffer, 65535);
FileStream.Free;
Спасибо.
← →
Правильный Вася (2007-04-17 11:54) [1]TStringList
.Delimiter
.DelimitedText
.LoadFromFile
← →
allucard (2007-04-17 12:53) [2]Выводит только первые пять символов, и всё.
Хотя файлы с обычным текстом нормально.
Вот коды символов:
30 33 50 9D 07 00 14 00 08 00 64 9D 07 00 14 00
Т.е 00 уже не читает а переводит строку и всё.
Вот код:
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;
и delimiter и delimitedtext опускал добавлял - не помогала.
← →
Reindeer Moss Eater © (2007-04-17 12:58) [3]Выводит только первые пять символов, и всё.
Это ты неправильно выводишь.
← →
Сергей М. © (2007-04-17 12:59) [4]
> Вот коды символов
Это что, дамп оригинального файла ?
Если так, то этот файл отнюдь не текстовый.
← →
allucard (2007-04-17 13:03) [5]
> Сергей М. © (17.04.07 12:59) [4]
>
> Это что, дамп оригинального файла ?
Да.
Ну не совсем он текстовый, дальше там текстовая информация.
Вообще я уже сталкивался с этим раньше.
То, что блокнот открывает, Delphi компонентами своими не видит.
Что делать?
> Reindeer Moss Eater © (17.04.07 12:58) [3]
Посоветуй, как правильно.
← →
Reindeer Moss Eater © (2007-04-17 13:04) [6]Что как правильно?
Данные считаны все и правильно.
Дальше надо вспомнить что это за данные и как с ними можно обращаться и можно ли с ними обращаться как со строками.
← →
Сергей М. © (2007-04-17 13:05) [7]
> allucard (17.04.07 13:03) [5]
> Ну не совсем он текстовый
Ну да, разумеется)
"Не совсем беременная" следует рассматривать как "не беременная")
← →
Плохиш © (2007-04-17 13:05) [8]
> Вообще я уже сталкивался с этим раньше.
> То, что блокнот открывает, Delphi компонентами своими не
> видит.
Опять картинки в блокноте обрабатывают. Всё делфи видит, это ты не видишь...
← →
allucard (2007-04-17 13:06) [9]Я так понял тут StringList не поможет?
Тогда что?
← →
Reindeer Moss Eater © (2007-04-17 13:07) [10]кстати зачем вообще нужен был файлстрим если у стринглиста есть метод загрузки из файла?
Надеялся с помощью этого наколоть судьбу и работать с двоичкой как с текстом?
← →
Reindeer Moss Eater © (2007-04-17 13:08) [11]Тогда что?
Обработка области памяти. Деление на куски по нулевому байту.
← →
Плохиш © (2007-04-17 13:09) [12]
> allucard (17.04.07 13:06) [9]
> Я так понял тут StringList не поможет?
>
> Тогда что?
Цикл for поможет, к примеру...
← →
allucard (2007-04-17 13:14) [13]Как описать это?
Какой класс или переменная работает с двоичной системой?
← →
Плохиш © (2007-04-17 13:23) [14]
> Какой класс или переменная работает с двоичной системой?
Ты удивишься, но компьютер другой системы счисления кроме двоичной не знает.
← →
allucard (2007-04-17 13:25) [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 ...
← →
Reindeer Moss Eater © (2007-04-17 13:28) [16]PChar,StrLen,Операция сложения и цикл.
← →
allucard (2007-04-17 13:28) [17]
> Ты удивишься, но компьютер другой системы счисления кроме
> двоичной не знает.
Я бы удивился, если бы та понял что я спрашиваю :)
Как описывать переменную, которая содержит строки просто данных(не текстовых), а вообще любых?
← →
Virgo_Style © (2007-04-17 13:30) [18]var buf: array of byte;//char, integer, ...
← →
allucard (2007-04-17 13:31) [19]
> Virgo_Style © (17.04.07 13:30) [18]
строки
← →
Reindeer Moss Eater © (2007-04-17 13:35) [20]в школу.
← →
allucard (2007-04-17 13:38) [21]уже пока не нужно удалять этот бред. Ручками удалю.
Как правильно это установить, чтоб по строкам слова (от 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;
← →
Сергей М. © (2007-04-17 13:48) [22]
> этот бред
А иначе как бредом это и не назовешь)
То у тебя
> строка текста(слов, отделённых пробелами)
то вдруг
> строкам слова (от 1 до 20 пробелов между строками)
Ты уж бросай курить траву и определись наконец, что у тебя есть "строка", что есть "слово", что есть "строка слова" и пр. и пр.
)
← →
allucard (2007-04-17 13:54) [23]
> Сергей М. © (17.04.07 13:48) [22]
Ну опечатался.
Строка текста в которой слова отделены пробелами,
а нужны строки текста со словами, без пробелов.
← →
Virgo_Style © (2007-04-17 13:55) [24]особенно "строка любых данных" меня интересует
← →
Сергей М. © (2007-04-17 14:00) [25]
> allucard (17.04.07 13:54) [23]
Так у тебя текстовый файл или не текстовый ?
Откуда в текстовом файле взялись "нули" ?
Нет и не должно быть в текстовом файле нулей, по кр.мере в ANSI-кодировке.
← →
allucard (2007-04-17 14:15) [26]
> Сергей М. © (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:25) [27]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:34) [28]
> Сергей М. © (17.04.07 14:25) [27]
Respect и ура.
Теперь догнал как это работает.
Вопросов нет.
← →
Сергей М. © (2007-04-17 14:37) [29]
> ура
В твоем случае это пока еще смахивает на "голым задом на амбразуру")
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.057 c