Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2010, 11:51   #11
BoT_T
Пользователь
 
Аватар для BoT_T
 
Регистрация: 19.09.2010
Сообщений: 50
По умолчанию

Цитата:
Сообщение от SERG1980 Посмотреть сообщение
Не понятно чем вас не устраивает стринглист
Это и ненужно...
ICQ 611 - 892
BoT_T вне форума Ответить с цитированием
Старый 06.12.2010, 12:03   #12
Neoteric
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а можно узнать причину?
В стринге сколько вместиться? 255 символов, в анси под 2 гига
Neoteric вне форума Ответить с цитированием
Старый 06.12.2010, 12:05   #13
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Для поста №11 Ну конечно если файл состоит из одной строки то может и не надо, а если предположим строк несколько десятков или сотен тогда не совсем удобно хранить всё это в переменной типа String
SERG1980 вне форума Ответить с цитированием
Старый 06.12.2010, 12:05   #14
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

справку почитайте.

string=AnsiString(в юникодизированной делфи =UnicodeString) - 2ГБ
ShortString=Pascal.string - 255 символов.

SERG1980, хозяин барин, значит видимо надо
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.12.2010, 12:08   #15
Neoteric
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 23
По умолчанию

о_О помню у меня была анологичная проблема, в стринг все не умещалось, пришлось использовать AnsiString
Neoteric вне форума Ответить с цитированием
Старый 06.12.2010, 12:10   #16
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

может дело в Юникоде?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.12.2010, 12:13   #17
Neoteric
Пользователь
 
Регистрация: 31.03.2009
Сообщений: 23
По умолчанию

неисключено
Neoteric вне форума Ответить с цитированием
Старый 06.12.2010, 12:17   #18
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Любой файл в строку:

Код:
{$IFNDEF UNICODE}
type
  RawByteString = AnsiString;
{$ENDIF}

function FileToString(const FileName: string): RawByteString;
var
  fs: TFileStream;
  Len: Integer;
begin
  fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    Len := fs.Size;
    SetLength(Result, Len);
    if Len > 0 then
      fs.ReadBuffer(Result[1], Len);
  finally
    FreeAndNil(fs);
  end;
end;
Тока учтите, что такой вещи как "просто текст" не существует. В вашем текстовом файле может быть и UTF8 и Unicode BE/LE. Для текстовых файлов я бы рекомендовал использование методов TEncoding.

P.S. Ну и до кучи - обратная функция:


Код:
procedure StringToFile(const FileName: string; const Contents: RawByteString; Append: Boolean = False);
var
  FS: TFileStream;
  Len: Integer;
begin
  if Append and FileExists(FileName) then
  begin
    if Contents = '' then
      Exit;
  
    FS := TFileStream.Create(FileName, fmOpenReadWrite or fmShareDenyWrite);
  end
  else
    FS := TFileStream.Create(FileName, fmCreate or fmShareDenyWrite);
  try
    if Append then
      FS.Seek(0, Ord(soEnd)); 

    Len := Length(Contents);
    if Len > 0 then
      FS.WriteBuffer(Contents[1], Len);
  finally
    FreeAndNil(FS);
  end;
end;
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

Последний раз редактировалось GunSmoker; 06.12.2010 в 12:20.
GunSmoker вне форума Ответить с цитированием
Старый 06.12.2010, 12:18   #19
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

кстати не советую вообще через TStringList читать, ибо памяти много жрется(на каждую строку, а потом еще на итоговую)

можно сделать так
Код:
function FileAsString(s:string):AnsiString;//здесь пишу строго анси.
var F:TFileStream;
begin
 F:=TFileStream.Create(s,fmOpenRead);
 SetLength(Result,F.Size);
 F.ReadBuffer(Result[1],Length(Result));
 F.Free;
end;
GunSmoker,
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как записать растр в файл? Как прочесть растр из файла? litvin44 Win Api 1 20.05.2010 23:17
HTML как текстовый файл Fierce Microsoft Office Excel 5 12.05.2010 20:34
Прочесть файл до знака Progs1024 Помощь студентам 4 22.11.2009 11:14
Как развернуть проигрываемый видео файл на весь екран SeRhy Мультимедиа в Delphi 2 26.01.2008 21:43
Как прочесть txt файл www.site.ru/info.txt BR17UY Работа с сетью в Delphi 1 16.04.2007 13:01