Вниз
Скачать: CL | DM;

Чтение файла   Найти похожие ветки 

← →
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 вся ветка

Скачать: CL | DM;



Память: 0.51 MB
Время: 0.013 c
2-1176622206
Romm
2007-04-15 11:30
2007.05.06
Рисунок через сокет


1-1173099044
Zeleniy
2007-03-05 15:50
2007.05.06
прозрачный RichEdit


3-1171525840
Layner
2007-02-15 10:50
2007.05.06
Кто как работет и с MSSQL2000 и c MSSQL2005?


2-1176805357
Fynjy1984
2007-04-17 14:22
2007.05.06
Помогите правильно составить запрос


2-1176458606
allucard
2007-04-13 14:03
2007.05.06
Ошибка: Type TRec needs finalization - not allowed in file type




   Наверх