Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.06;
Скачать: 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 вся ветка

Текущий архив: 2007.05.06;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.02 c
6-1162736558
SHEI'TI
2006-11-05 17:22
2007.05.06
Отключить картинки в WebBrowser


11-1158055111
[e]Bu$ter
2006-09-12 13:58
2007.05.06
Как отловить потерю фокуса у формы


2-1176622206
Romm
2007-04-15 11:30
2007.05.06
Рисунок через сокет


15-1175826761
Slider007
2007-04-06 06:32
2007.05.06
С днем рождения ! 6 апреля


1-1173692656
Krants
2007-03-12 12:44
2007.05.06
Сортировка в ShellListView