Способы открытия файла TXT на запись

5 (1)
  • Развернуть Способы открытия файла TXT на запись ( Andrew01  22.07.2013 08:34 )
    5(1)
    Доброе время суток!

    есть код:

    import Bankinter,rslx,ro,doctor,CurrInter, rsexts;
    
    k_server = "\\\\192.168.2.5";
    k_base   = "\\BMK\\kb\\data";
    
    dat1=date();
    getdate(dat1,"Введите дату");
    //np=100;
    datesplit(dat1,dd,mm,yyyy);
    
    if (strlen(string(dd))<2) dds="0"+string(dd); 
    else dds=string(dd);end;                      
    if (strlen(string(mm))<2) mms="0"+string(mm); 
    else mms=string(mm);end;
    
    ob = TDirList (k_server + k_base + yyyy + "\\ARX\\" + "*"+mms+dds+".txt","f");
    ob.Sort (0);
    j = 0;
    delfile (k_server + k_base + yyyy + "\\ARX\\" + "_1.txt");
    file full(k_server + k_base + yyyy + "\\ARX\\" + "_1.txt") txt write;
    file input()txt;
    while(j<ob.Count)    
    copyfile(k_server + k_base + yyyy + "\\ARX\\" + ob.name (j),ob.name (j));
    open(input,ob.Name(j));
    //[#                   ] (ob.Name(j));  
    //msgbox(ob.name(j));
    rewind(input);
      while (next(input))
       [#](input.str);
       insert(full,input.str);
        
      end;
     close(input);
    removefile(ob.name(j));
    j=j+1;
    end;
    


    в строке 20 выдает ошибку, требуется ")".
    Если делаю
     file full("\\\\192.168.2.5\\BMK\\kb\\data2013\\ARX\\_1.txt") txt write;
    то ошибок нет, но хотелось бы динамику в макросе, т.е. в следующем году макрос надо переделывать и так из года в год.
    Можно ли каким то способом обойти это? есть ли какие то другие функции открытия на запись тестового файла?
    >> Ответить
    • Развернуть Я использовал обходной путь ( OldFox  22.07.2013 10:10 )
      5(1)
      Использовать в цикле по списку файлов конструкцию:

      SetOutput ( ob.Name(j) /*[, TRUE]*/)

      println(insert.str);

      SetOutPut(NULL,TRUE);


      >> Ответить
    • Развернуть А если попробовать так... ( coperius  22.07.2013 10:44 )
      5(1)
      fname = k_server + k_base + yyyy + "\\ARX\\" + "_1.txt";
      file full(fname) txt write;
      

      >> Ответить
    • Развернуть попробуйте TStreamDoc ( Sergey V. Mamaev  22.07.2013 11:43 )
      5(1)
      данный класс описан в документации Проблемно-ориентированный язык RSL
      >> Ответить
    • Развернуть хотя не понятно ( Sergey V. Mamaev  22.07.2013 11:52 )
      5(1)
      что вам мешает с full поступить так же, как с input? то есть объявить пустым, потом опеном нужное имя файла
      >> Ответить
    • Развернуть Open(txtfile,filename) ( yukson  25.07.2013 13:40 )
      5(1)
      file txtfile() txt write;
      Open(txtfile, "\\\\server1\\d$\\PTKPSD\\Post\\ied\\"+lFilename);


      >> Ответить
      • Развернуть Спасибо всем кто отзвался, вы мне очень помогли! ( Andrew01  30.07.2013 09:07 )
        5(1)
        Not specified
        >> Ответить
        • Развернуть [хелп ми ( noob  23.10.2013 05:34 )
          5(1)
          помогите плиз надо в rsl rs-bank 5.5 сделать программу которая создат файл , его же импортирует на запись затем запрашивает ввести текст с последующим сохранением.
          >> Ответить
          • Развернуть эммм ( Sergey V. Mamaev  23.10.2013 08:50 )
            5(1)
            file blabla("..\\txtfile\\somefile.txt") txt append;
            
            var s;
            if(getstring(s,"enter some string?"))
              blabla.str=s;
              insert(blabla);
              close(blabla);
            end;
            вроде всё.. хотя я не совсем понимаю фразу "импортирует на запись"
            >> Ответить
            • Развернуть спс большое ты очень помог. ( noob  23.10.2013 09:32 )
              5(1)
              но у меня еще одна проблемка есть
              надо вывести эементы массива через запятую.
              п.с.элементы вводить с клавы. тип элементов строковый

              >> Ответить
              • Развернуть хелп ( noob  23.10.2013 09:34 )
                5(1)
                но у меня еще одна проблемка есть
                надо вывести эементы массива через запятую.
                п.с.элементы вводить с клавы. тип элементов строковый

                >> Ответить
                • Развернуть хелп ! сдать нужно к сегодняшнему дню. ( noob  23.10.2013 09:40 )
                  5(1)
                  надо вывести эементы массива через запятую.
                  п.с.элементы вводить с клавы. тип элементов строковый

                  >> Ответить
                  • Развернуть есть что-то похожее ( Sergey V. Mamaev  23.10.2013 10:11 )
                    5(1)
                    есть что-то похожее, но перерабатывайте уж сами (как минимум вместо "\n" ставьте ",")
                    macro kbcaIsTArray(s)
                      return IsEqClass("TArray",s);
                    end;
                    
                    macro debugbox
                      var s,i,c,b,ai,n;
                      if(not(kbcaNoDebug))
                      if(kbcaOverDebug)
                        i=0;s="";b="";
                        while(getparm(i,c))
                          if(kbcaIsArray(c))
                            ai=0;
                            while(valtype(c[ai]))
                              if(ai==0)
                                if(kbcaIsTArray(c))
                                  s=s+b+"TArray["+c.size+"]: [";b="";
                                else
                                  s=s+b+"array: [";b="";
                                end;
                              end;
                              s=s+b+"["+ai+"] "+string(c[ai]);
                              b="\n";
                              ai=ai+1;
                            end;
                            s=s+"] :TArray";
                          elif(valtype(c)==v_date)
                            s=s+b+string(c:o);
                            b="\n";
                          elif((valtype(c)==v_numeric)or(valtype(c)==v_money))
                            s=s+b+string(c:0:4);
                            b="\n";
                          elif(kbcaIsBTR(c))
                            n=genclassname(c);
                            s=s+b+n+": ["+kbcaListRecord(c,true,"=")+"] :"+n;
                            b="\n";
                          elif(valtype(c)!=0)
                            if(c==null)
                              s=s+b+"NULL";
                            else
                              s=s+b+string(c);
                            end;
                            b="\n";
                          else
                            s=s+b+"NULL";
                            b="\n";
                          end;
                          i=i+1;
                        end;
                        msgbox("Сообщение отладки:|"+s);
                      end;
                      end;
                    end;
                    параметров можно сколько угодно передавать; массивы тоже можно в качестве параметра (всё выводится). вместо msgbox сделайте println.. первые две проверки можете вырезать (вроде бы)
                    >> Ответить
                    • Развернуть спс но ( noob  23.10.2013 10:14 )
                      5(1)
                      а можно не громоздко? используя просто конструкции рсл. без лишних классов?
                      >> Ответить
                      • Развернуть помогите плиз только начал изучать ( noob  23.10.2013 10:26 )
                        5(1)
                        можно это как-нибудь прописать коротко и ясно?
                        >> Ответить
                      • Развернуть средствами RSL ( Sergey V. Mamaev  23.10.2013 10:41 )
                        5(1)
                        средствами RSL вам выведет просто "Object TArray"
                        если вам только массивы нужны:
                        var a=tarray;
                        macro m(c);
                          var s="",i,b="",ai,n;
                                ai=0;
                                while(valtype(c[ai]))
                                  s=s+b+string(c[ai]);
                                  b=",";
                                  ai=ai+1;
                                end;
                                s=s+"";
                          return s;
                        end;
                        a[a.size]=12;
                        a[a.size]=13;
                        a[a.size]=19;
                        
                        msgbox(m(a));
                        не совсем "красиво", но работает
                        >> Ответить
                        • Развернуть спс ( noob  23.10.2013 10:43 )
                          5(1)
                          а можете органидзовать ввод элементов с клавы? практикуюсь на рс-банке 5.5
                          >> Ответить
                          • Развернуть оответьте пожаалуйста ( noob  23.10.2013 10:54 )
                            5(1)
                            ввод элементов мне нужно с клавы. и вывести через запятую каждый символ
                            >> Ответить
                          • Развернуть ввод ( Sergey V. Mamaev  23.10.2013 10:55 )
                            5(1)
                            ввод в документации, смотря что надо: getstring, getint, getmoney, getdate, gettrue, getdouble
                            общее у них: в первом параметре указывается значение "по умолчанию", вторым - сопроводительный текст
                            возвращают все, кроме gettrue -- false, если был нажат esc
                            gettrue возвращается выбранное значение
                            >> Ответить
                            • Развернуть getstring ( noob  23.10.2013 10:56 )
                              5(1)
                              • Развернуть ну? ( Sergey V. Mamaev  23.10.2013 10:59 )
                                5(1)
                                var s="qwe"; // значение по умолчанию
                                if(getstring(s,"мне чота нада!"))
                                  // работаем дальше
                                else
                                  exit(1); // не работаем дальше
                                end;

                                >> Ответить
                                • Развернуть вот так имеету ввиду? ( noob  23.10.2013 11:04 )
                                  5(1)
                                  var a=tarray;
                                  macro m(c);
                                  var s="",i,b="",ai,n;
                                  ai=0;
                                  if (getstring(s,""))
                                  while(valtype(c[ai]))
                                  s=s+b+string(c[ai]);
                                  b=",";
                                  ai=ai+1;
                                  end;
                                  s=s+"";
                                  return s;
                                  end;
                                  getstring(s,"введите сплошной текст");

                                  a[a.size]=12;
                                  a[a.size]=34;
                                  a[a.size]=6;

                                  println(m(a));


                                  else exit(1)
                                  end.
                                  >> Ответить
                                  • Развернуть мне надо чтоб ( noob  23.10.2013 11:13 )
                                    5(1)
                                    var a=tarray;
                                    macro m(c);
                                    var s="",i,b="",ai,n;
                                    ai=0;
                                    getstring(s,"введите сплошной текст");

                                    while(valtype(c[ai]))
                                    s=s+b+string(c[ai]);
                                    b=",";
                                    ai=ai+1;
                                    end;
                                    s=s+"";
                                    return s;
                                    end;

                                    a[a.size]=12; мне надо чтоб не присваивать определенные цифры а ввод с клавы строку и чтоб 1 символ присваивал первому элементу массива и тэ дэ. и между ниими запятые
                                    a[a.size]=34;
                                    a[a.size]=6;

                                    println(m(a));
                                    end.
                                    >> Ответить