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

Вниз

Запись в файл в Win кодировке используя TFileStream   Найти похожие ветки 

 
Frozzen   (2004-12-17 10:53) [0]

Господа подскажите!
   Имею

   DFile: TFileStream;
   RecordBuffer: array[1..4000] of Char;
   

   DFile.Write(RecordBuffer, FHeader.RecordSize);
   или  
   DFile.WriteBffer(RecordBuffer, FHeader.RecordSize);

как записать это все дело в кодировке win?


 
Fay ©   (2004-12-17 10:55) [1]

А в буфере данные в какой кодировке?


 
Frozzen   (2004-12-17 10:57) [2]

буфер заполняю так

s : String;

RecordBuffer[Addr-1+N]:=S[N];


 
Frozzen   (2004-12-17 10:58) [3]

s := "папап"


 
Fay ©   (2004-12-17 11:08) [4]

Я чё-то не врубаюсь. Данные в win1251, а записаваются в другой кодировке? Если да, то виноваты космические лучи.

Выкладывайте код.


 
Frozzen   (2004-12-17 11:12) [5]

это я уже раскалупал Тдбф

tab.SetFieldData(22,"МЕСТ");
//---------------------------------------------------------
procedure TDbf.SetFieldData(FieldNo: Integer; Data: String);
var
 IField: PField;
 S, W: String;
 N, Addr: Longint;
 G, M, D: Word;
begin
 if (FieldNo<1) or (FieldNo>FNumFields) then
   raise ED.Create("SetFieldData: Неверный номер поля: "+IntToStr(FieldNo)) else
 begin
   IField:=FieldList.Items[FieldNo-1];
   W:=TrimRight(Data); // Удаление пробелов и спецсимволов справа
   if (Length(W)<=IField^.FieldSize) or
      ((IField^.FieldType="L") and (Length(W)<=4)) then
   with IField^ do
   begin
     if W<>"" then   // Преобразование данных в зависимости от типа
     try
       case FieldType of
         "L" : if (UpperCase(W)="TRUE") or (UpperCase(W)="YES") then S:="T"
               else if (UpperCase(W)="FALSE") or (UpperCase(W)="NO") then
                       S:="F" else S:=" ";
         "D" : begin
                 G:=StrToInt(Copy(W, 7, 2))+1900; if G<=1950 then G:=G+100;
                 M:=StrToInt(Copy(W, 4, 2)); D:=StrToInt(Copy(W, 1, 2));
                 S:=FormatDateTime("yyyymmdd", EncodeDate(G, M, D));
               end;
     "F","N" : begin
                 if (Pos(".", W)>0) and (DecimalSeparator=",") then W[Pos(".", W)]:=",";
                 S:=FloatToStrF(StrToFloat(W), ffFixed, FieldSize, FieldPrecision);
                 if (FieldPrecision>0) and (DecimalSeparator=",") then
                   S[Pos(",", S)]:=".";
               end
       else S:=W; end;
     except raise ED.Create("SetFieldData: Ошибка данных - Ряд: "+
                  IntToStr(FCurrentRecord)+", Поле: "+IntToStr(FieldNo)); end;
     case FieldType of
       "N","F","M": S:=PadLeft(S, FieldSize) // Дополнить пробелами слева
     else
       S:=PadRight(S, FieldSize);            // Дополнить пробелами справа
     end; // case
     Addr:=2; N:=0; IField:=FieldList.Items[N];
     while N<(FieldNo-1) do
     begin Inc(Addr, IField^.FieldSize); Inc(N); IField:=FieldList.Items[N]; end;
     for N:=1 to Length(S) do RecordBuffer[Addr-1+N]:=S[N];
     FModified:=True; // Буфер dbf-файла обновлен
   end else raise ED.Create("SetFieldData: Недопустимый размер данных"+#13+
             "Ряд: "+IntToStr(FCurrentRecord)+", Поле: "+IntToStr(FieldNo));
 end;
end;
//----------------------------------------------------------
procedure TDbf.WriteRecord;
var Y,M,D: Word;
i : integer;
begin
 try
   with FHeader do begin Y:=Year; M:=Month; D:=Day; end; Y:=Y+1900;
   if EncodeDate(Y,M,D)<>Now then SetDbfDate(Now);  // Дата модификации файла изменилась
   DFile.Seek(FHeader.HeaderSize+((FCurrentRecord-1)*FHeader.RecordSize), soFromBeginning);
     {Buffer}
  // for i := 1  to FHeader.RecordSize do
    //RecordBuffer[i] :=

   DFile.Write(RecordBuffer, FHeader.RecordSize);
   FModified:=False;
 except
   raise ED.Create("WriteRecord: Ошибка сохранения записи");
 end;
end;


 
Frozzen   (2004-12-17 11:14) [6]

вот заполнение буфера из SetFielData

for N:=1 to Length(S) do RecordBuffer[Addr-1+N]:=S[N];


 
Fay ©   (2004-12-17 11:27) [7]

>> for N:=1 to Length(S) do RecordBuffer[Addr-1+N]:=S[N];
Если это настоящий код SetFielData, то выброси этот компонент.
Могу прислать VkDBF - в нём галюнов поменьше 8).


 
Frozzen   (2004-12-17 14:18) [8]

admin@pronto.krsk.info



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

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

Наверх





Память: 0.47 MB
Время: 0.038 c
14-1103103050
Павел
2004-12-15 12:30
2005.01.02
Не грузится Windows


14-1102728232
avk02
2004-12-11 04:23
2005.01.02
Что-, Зачем- и Где-фазы


14-1102766463
DillerXX
2004-12-11 15:01
2005.01.02
Хочу спросить ваше мнение что покупать


1-1103198145
Roadstar
2004-12-16 14:55
2005.01.02
ListView


14-1103173074
Чеширский_Кот
2004-12-16 07:57
2005.01.02
Мазуту, Алексу и всем-всем-всем (устойчивое выражение?)





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