Страница 1 из 1

Непонятные символы в создаваемом файле

Добавлено: 14 июл 2010, 15:49
RAJAH
Здравствуйте!
Создаю выгрузку при помощи функций File_OpenFile и File_Write. В результате получаю не совсем то, что хочу записать в файл. Например:

Код: Выделить всё

001826;                                                                                                                                                                                                                                                        01.06.2010;                                                                                                                                                                                                                                                    
1500.0000;;                                                                                                                                                                                                                                                    0269008334;                                                                                                                                                                                                                                                    40702810706390100519;                                                                                                                                                                                                                                          
048073601;                                                                                                                                                                                                                                                     7740000076;                                                                                                                                                                                                                                                    40702810700000001663;                                                                                                                                                                                                                                          
044525232;                                                                                                                                                                                                                                                     0;                                                                                                                                                                                                                                                             01.06.2010;                                                                                                                                                                                                                                                    ;                                                                                                                                                                                                                                                              NЗА УСЛУГИ СВЯЗИ ПО СЧ. 1 ОТ 01.06.2010Г НДС (18%) 228-81руб, включен в сумму.;                                                                                                                                                                                 ;                                                                                                                                                                                                                                                              
Видны какие-то квадратики и ужасно длинные разрывы. Вот как выглядит, например, в 16-тиричном редакторе (откуда-то первый символ с кодом '07' взялся):

Код: Выделить всё

07 30 30 31 38 32 34 3B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0B 30 31 2E 30 36 2E 32 30 31 30 3B 00 00 00 00
Код записи в файл следующий:

Код: Выделить всё

    f := CreateFileHandle('xxx');
    while papka = '' do
    {
      papka:=GetDirName('Укажите место выгрузки файла');
    }
    papka:=papka+'\';
    maska:=DateToStr(Cur_Date, 'DD')+DateToStr(Cur_Date, 'MM')+DateToStr(Cur_Date, 'YY');
    num:='01';
    File_OpenFile(papka+maska+num+'sb.333', stCreate, f);
    DeleteFileHandle(f);
    f := CreateFileHandle('xxx');
    File_OpenFile(papka+maska+num+'sb.333', stOpenWrite, f);
    ndok:='';
    innplat:='';
    rsplat:='';
    bikplat:='';
    innpol:='';
    rspol:='';
    bikpol:='';
    vidpl:='';
    ocher:='';
    nazn:='';
    _loop
    {
      ndok:=Oem2Ansi(replace(basefin.nodoc, ';', '!'));
      File_Write(ndok+';', f);
      File_Write(DateToStr(plpor.datvip, 'DD.MM.YYYY')+';', f);
      File_Write(DoubleToStr(soprhoz.summa, '\4p666666666666666.8888')+';', f);
      innplat:=Oem2Ansi(replace(katorgplat.unn, ';', '!'));
      File_Write(innplat+';', f);
      rsplat:=Oem2Ansi(replace(katbankplat.schet1, ';', '!'));
      File_Write(rsplat+';', f);
      bikplat:=Oem2Ansi(replace(katbankplat.mfo1, ';', '!'));
      File_Write(bikplat+';', f);
      innpol:=Oem2Ansi(replace(katorg.unn, ';', '!'));
      File_Write(innpol+';', f);
      rspol:=Oem2Ansi(replace(katbank.schet1, ';', '!'));
      File_Write(rspol+';', f);
      bikpol:=Oem2Ansi(replace(katbank.mfo1, ';', '!'));
      File_Write(bikpol+';', f);
      vidpl:=plpor.telepost;
      File_Write(vidpl+';', f);
      File_Write(DateToStr(plpor.datob, 'DD.MM.YYYY')+';', f);
      if length(plpor.kodnew) > 0 then
        if length(plpor.kodnew) > 2 then
          ocher:=Oem2Ansi(replace(substr(plpor.kodnew, length(plpor.kodnew)-1, 2), ';', '!'))
        else
          ocher:=Oem2Ansi(replace(plpor.kodnew, ';', '!'))
      else
        ocher:='';
      File_Write(ocher+';', f);
      nazn:=Oem2Ansi(replace(plpor.namepl1+plpor.namepl2+plpor.namepl3+plpor.namepl4, ';', '!'));
      File_Write(nazn+';', f);
      File_Write(kodst+';', f);
      File_WriteLn(prizn, f);
    }
    File_Close(f);
    DeleteFileHandle(f);
Как надо правильно организовать выгрузку в файл?

Re: Непонятные символы в создаваемом файле

Добавлено: 14 июл 2010, 16:16
edward_K
1. Не понятно зачем 2 раза открывать файл
2. file ?? не хотите попробовать? код будет чуть наглядней
3. Мне кажется тут основная проблема с writeln - замените ее на fh.Write(chr(13) + chr(10)). Вроде как нельзя мешать write и writeln при выводе.

Re: Непонятные символы в создаваемом файле

Добавлено: 14 июл 2010, 16:23
Иван
может тут как в стандартной библиотеке си, есть бинарный режим вывода в файл, а есть текстовый)

Re: Непонятные символы в создаваемом файле

Добавлено: 14 июл 2010, 16:27
RAJAH
edward_K писал(а):1. Не понятно зачем 2 раза открывать файл
Первый раз - создание, второй - открытие. Как надо-то?
edward_K писал(а):2. file ?? не хотите попробовать? код будет чуть наглядней
Можно поподробнее?
edward_K писал(а):3. Мне кажется тут основная проблема с writeln - замените ее на fh.Write(chr(13) + chr(10)). Вроде как нельзя мешать write и writeln при выводе.
По-моему, тут с самого начала проблема, когда вставляется первым символом chr(7), т.е. 001826 вместо 001826, а не в конце при writeln.

Re: Непонятные символы в создаваемом файле

Добавлено: 14 июл 2010, 16:47
edward_K
а вы попробуйте сначала
file можно в фейсе
где то верху
file fh;
fh.OpenFile(sfilenm, stCreate); - это уже открыли по записи
fh.write('dddd') и так далее.

Re: Непонятные символы в создаваемом файле

Добавлено: 14 июл 2010, 17:14
RAJAH
Так?

Код: Выделить всё

File gfFile;

...

    f := gfFile.Handle;
    while papka = '' do
    {
      papka:=GetDirName('Укажите место выгрузки файла');
    }
    papka:=papka+'\';
    maska:=DateToStr(Cur_Date, 'DD')+DateToStr(Cur_Date, 'MM')+DateToStr(Cur_Date, 'YY');
    num:='01';
    gfFile.OpenFile(papka+maska+num+'sb.333', stCreate);
    _loop
    {
      ndok:=oem2ansi(replace(basefin.nodoc, ';', '!'));
      gfFile.Write(ndok+';');
      gfFile.Write(DateToStr(plpor.datvip, 'dd.mm.yyyy')+';');
      gfFile.Write(DoubleToStr(soprhoz.summa, '\4p666666666666666.8888')+';');
      innplat:=oem2ansi(replace(katorgplat.unn, ';', '!'));
      gfFile.Write(innplat+';');
      rsplat:=oem2ansi(replace(katbankplat.schet1, ';', '!'));
      gfFile.Write(rsplat+';');
      bikplat:=oem2ansi(replace(katbankplat.mfo1, ';', '!'));
      gfFile.Write(bikplat+';');
      innpol:=oem2ansi(replace(katorg.unn, ';', '!'));
      gfFile.Write(innpol+';');
      rspol:=oem2ansi(replace(katbank.schet1, ';', '!'));
      gfFile.Write(rspol+';');
      bikpol:=oem2ansi(replace(katbank.mfo1, ';', '!'));
      gfFile.Write(bikpol+';');
      vidpl:=plpor.telepost;
      gfFile.Write(vidpl+';');
      gfFile.Write(DateToStr(plpor.datob, 'dd.mm.yyyy')+';');
      if length(plpor.kodnew) > 0 then
        if length(plpor.kodnew) > 2 then
          ocher:=oem2ansi(replace(substr(plpor.kodnew, length(plpor.kodnew)-1, 2), ';', '!'))
        else
          ocher:=oem2ansi(replace(plpor.kodnew, ';', '!'))
      else
        ocher:='';
      gfFile.Write(ocher+';');
      nazn:=oem2ansi(replace(plpor.namepl1+plpor.namepl2+plpor.namepl3+plpor.namepl4, ';', '!'));
      gfFile.Write(nazn+';');
      gfFile.Write(kodst+';');
      gfFile.WriteLn(prizn);
    }
    gfFile.Close;
То же самое на выходе.

Re: Непонятные символы в создаваемом файле

Добавлено: 14 июл 2010, 17:20
edward_K
gfFile.WriteLn(prizn); то замените на то что писал, смена формы вывода это не отменяет!.

Re: Непонятные символы в создаваемом файле

Добавлено: 14 июл 2010, 17:26
RAJAH
Теперь нечто вроде

Код: Выделить всё

                                                                                                                                                                                                                                                            001826;                                                                                                                                                                                                                                                        dd.mm.yyyy;                                                                                                                                                                                                                                                    
1500.0000;;                                                                                                                                                                                                                                                    0269008334;                                                                                                                                                                                                                                                    40702810706390100519;                                                                                                                                                                                                                                          
048073601;                                                                                                                                                                                                                                                     7740000076;                                                                                                                                                                                                                                                    40702810700000001663;                                                                                                                                                                                                                                          
044525232;                                                                                                                                                                                                                                                     0;                                                                                                                                                                                                                                                             dd.mm.yyyy;                                                                                                                                                                                                                                                    ;                                                                                                                                                                                                                                                              NЗА УСЛУГИ СВЯЗИ ПО СЧ. 1 ОТ 01.06.2010Г НДС (18%) 228-81руб, включен в сумму.;                                                                                                                                                                                 ;                                                                                                                                                                                                                                                              0
Думаю, большой разницы нет...

Re: Непонятные символы в создаваемом файле

Добавлено: 14 июл 2010, 17:39
edward_K
а теперь write меняем на WriteLine
writeln тогда тоже пашет.
Write - у похоже нужно подпихивать только переменные.

Re: Непонятные символы в создаваемом файле

Добавлено: 14 июл 2010, 17:46
RAJAH
О! Благодарю!
Только возникает риторический вопрос: зачем тогда File_Write, <handle>.write и прочие прибамбасы, если правильно использовать WriteLine? И почему в документации про различия в этих операторах и когда какой применять не рассказано?

Re: Непонятные символы в создаваемом файле

Добавлено: 14 июл 2010, 17:53
edward_K
ну это не ко мне :).

Re: Непонятные символы в создаваемом файле

Добавлено: 14 июл 2010, 21:01
Ged
RAJAH писал(а): И почему в документации про различия в этих операторах и когда какой применять не рассказано?
Вроде в документации все есть.
  • procedure Write (field : anyType);
    procedure File_Write (field : anyType; handle : longInt);
    Процедура записывает в двоичном виде значение поля field в файл с текущей позиции без символа перевода каретки. Функция имеет проверку типа и работает с любым типом поля.
  • procedure WriteLn (field : string);
    procedure File_WriteLn (field : string; handle : longInt);
    Процедура записывает поле field в файл с текущей позиции с символом перевода каретки в конце строки. Функция не имеет проверки типа поля и работает только с полем типа string.

Re: Непонятные символы в создаваемом файле

Добавлено: 15 июл 2010, 09:49
RAJAH
Ged писал(а): Вроде в документации все есть.
  • procedure Write (field : anyType);
    procedure File_Write (field : anyType; handle : longInt);
    Процедура записывает в двоичном виде значение поля field в файл с текущей позиции без символа перевода каретки. Функция имеет проверку типа и работает с любым типом поля.
Вообще-то, мне казалось, что двоичный вид - это нечто вроде "100010101010001011110", а здесь какой-никакой, а вменяемый текст.
Ged писал(а):Функция не имеет проверки типа поля и работает только с полем типа string.
Номера документов, расчётные счета, назначения платежа - самые что ни на есть строки! :)

Re: Непонятные символы в создаваемом файле

Добавлено: 15 июл 2010, 10:05
edward_K
ну не совсем строки. вот если бы вы выводили переменные, тогда да. Да и то вопрос где будет отсечка - размер то string 255.