Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.03;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.005 c
15-1256910250
koha!
2009-10-30 16:44
2010.01.03
как избавится от этой заразы?


15-1257419287
Piter
2009-11-05 14:08
2010.01.03
В чем смысл спама от вконтакте?


2-1258041289
Zahar
2009-11-12 18:54
2010.01.03
Занят ли файл


2-1257950877
Alexey
2009-11-11 17:47
2010.01.03
Поток, передача параметра в onTerminated


2-1257960684
Валерий
2009-11-11 20:31
2010.01.03
Привязка линий





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