Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2010.01.03;
Скачать: [xml.tar.bz2];

Вниз

Проблема с выводом потока в файл   Найти похожие ветки 

 
inviz   (2009-01-15 14:56) [0]

Здравствуйте! Помогите пожалуста, зделал такую процедуру

procedure FileReplaceString(const FileName, strFind, strReplace: string);
  var
       fs: TFileStream;
       S: wideString;
begin
  fs := TFileStream.Create(FileName, fmOpenread or fmShareDenyNone);
  try
  SetLength(S, fs.Size);
  fs.ReadBuffer(S[1], fs.Size);
  finally
  fs.Free;
  end;
  S := StringReplace(S, strFind, strReplace, [rfReplaceAll, rfIgnoreCase]);
  fs := TFileStream.Create(FileName, fmCreate);
  try
  fs.WriteBuffer(S[1], Length(S));
  finally
  fs.Free;
  end;
end;

Открываю текстовый файл потоком, устанавливаю длинну строки S (WideString т.к. TXT файл большой) читаю файл в строку (потоком) заменяю в строке нужный текст своим записываю обратно в файл, когда открываю файл блокнотом там квадратики и каракули в чем может быть ошибка? что не так делается? Помогите пожалуста очень нада.


 
MBo ©   (2009-01-15 15:26) [1]

wide убери, просто string


 
Anatoly Podgoretsky ©   (2009-01-15 16:00) [2]

> inviz  (15.01.2009 14:56:00)  [0]

А какая у тебя среда?


 
inviz   (2009-01-15 16:03) [3]


> Anatoly Podgoretsky ©   (15.01.09 16:00) [2]

среда Delphi 2009


 
Servy ©   (2009-01-15 16:22) [4]

> среда Delphi 2009


Тогда AnsiString.


 
Anatoly Podgoretsky ©   (2009-01-15 16:57) [5]

Тогда ошибки здесь

 SetLength(S, fs.Size);  // размер S установлен в два раза больше
 fs.WriteBuffer(S[1], Length(S)); // здесь наоборот, записано в два раза меньше

Это конечно не объясняет проблем с квадартиками. Вероятнее всего что ты установил в блокноте не тот формат.


 
Anatoly Podgoretsky ©   (2009-01-15 16:58) [6]

Забыл спросить, а в каком формате был текстовый файл?
Это ты тоже умолчал.
И видишь ли ты нормально этот файл до конвертирования.
Может у тебя не Юникод файл, а ты его как Юникод, тогда естественно, ты его калечишь


 
inviz   (2009-01-15 17:08) [7]

читирую первый свой пост
> Открываю текстовый файл потоком, устанавливаю длинну строки
> S (WideString т.к. TXT файл большой)


TXT - текстовый файлик открывается блокнотом и нормально отображается, обычный текстовый файл.


 
inviz   (2009-01-15 17:14) [8]


>  SetLength(S, fs.Size);  // размер S установлен в два раза
> больше

а почему в 2 раза больше то? по идее же как раз должно быть.

>  fs.WriteBuffer(S[1], Length(S)); // здесь наоборот, записано
> в два раза меньше

а тут тогда писать не Length(), а запоминать первоначальный размер строки в переменную (например size) а потом fs.WriteBuffer(S[1], size);?


 
inviz   (2009-01-15 17:43) [9]

Проблема решилась :)

> Servy ©   (15.01.09 16:22) [4]
> > среда Delphi 2009Тогда AnsiString.

Заменил WideString на AnsiString все стало корректно отображатся Большое Спасиба :)


 
han_malign ©   (2009-01-15 17:48) [10]


> TXT - текстовый файлик открывается блокнотом и нормально отображается, обычный текстовый файл.

http://ru.wikipedia.org/wiki/Txt


 
inviz   (2009-01-15 17:55) [11]


> han_malign ©   (15.01.09 17:48) [10]
> > TXT - текстовый файлик открывается блокнотом и нормально
> отображается, обычный текстовый файл.http://ru.wikipedia.
> org/wiki/Txt

Сумничал молодец "возьми с полки пиражок...".

Тема закрыта


 
Anatoly Podgoretsky ©   (2009-01-15 19:15) [12]


> а почему в 2 раза больше то?

SizeOf(WideChar)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2010.01.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
15-1257160759
JohnKorsh
2009-11-02 14:19
2010.01.03
Не посоветует ли кто книгу по работе с сетями из Дельфи?


1-1231953992
Тыщ
2009-01-14 20:26
2010.01.03
Как использовать строковые константы в asm..end?


1-1231762680
WanderBuild
2009-01-12 15:18
2010.01.03
Нужна помощь по работе с ресурсами (конкретно RT_VERSION)


15-1257181639
Badevlad
2009-11-02 20:07
2010.01.03
Обсудить BDV DataHider 3.1


2-1258192297
AlexDan
2009-11-14 12:51
2010.01.03
положение GetPath





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский