Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.045 c
15-1176182477
vajo
2007-04-10 09:21
2007.05.06
Samsung представил двойника Renault Koleos


3-1171441023
kulkse
2007-02-14 11:17
2007.05.06
Проверка имени пользователя и пароля


15-1175926571
Pazitron_Brain
2007-04-07 10:16
2007.05.06
Причины поломки компьютера


1-1173183579
Интересующийся
2007-03-06 15:19
2007.05.06
Минимизация формы


1-1173705225
DelphiLexx
2007-03-12 16:13
2007.05.06
Инициализировать константу





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский