Главная страница
    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.004 c
15-1257173342
Иксик
2009-11-02 17:49
2010.01.03
Есть ли возможность вынести javascript события типа onclick


15-1250364331
Kerk
2009-08-15 23:25
2010.01.03
Попиарюсь маленько :)


15-1257024611
Юрий
2009-11-01 00:30
2010.01.03
С днем рождения ! 1 ноября 2009 воскресенье


15-1256938211
Юрий
2009-10-31 00:30
2010.01.03
С днем рождения ! 31 октября 2009 суббота


15-1257283812
Юрий
2009-11-04 00:30
2010.01.03
С днем рождения ! 4 ноября 2009 среда





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