Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2014, 11:15   #61
Uliy
Пользователь
 
Регистрация: 24.07.2014
Сообщений: 38
По умолчанию

Я еще раз проэксперементировала с кодом:
Код:
function TForm1.GetfieldName(strl: TStringList; name: string): string;
var
  s, word, name_en: string;
  i, k: integer;
  SimpleString : string;
begin
  //result:='';

  for i:=0 to strl.count-1 do begin
    s:=strl.ValueFromIndex[i];

    //if copy(s,1, length(name))=name then //нужная строка по имени
  if (CompareStr(copy(s,1,6), 'Name_en')=0) then
     //ShowMessage(s(7));
   // LowerCase(copy(s,1,7))= LowerCase('Name_ru');

    result:=copy(s,0,length(s)); //копируется нужный фрагмент из этой строки
     // SimpleString := AnsiLowerCase(result);

  end;
   {s:=Memo1.Text;
  word:=Copy(s,1,Pos(' ',s)-1);}

end;
попробовав вывести их как сообщение, получилось что он копирует как надо по абзацу(правда не много коряво )
теперь вопрос почему в этой процедуре данная выше функция не работает
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  Xml, strok: TStringList;
  Node:IXMLNode;
begin
   //чтение данного файла
   strok:=TStringList.Create;
   strok.LoadFromFile(Edit1.Text);
   Xml := TStringList. Create; // создаем объект
.
.
.
 Xml.Add ('     <tuv xml:lang="RU-EN" >');
   Xml.Add ('       <seg>'+ GetFieldName(strok, 'Name_ru') +'</seg>');  //поле name_ru
   Xml.Add ('     </tuv>');

Последний раз редактировалось Uliy; 02.09.2014 в 13:47.
Uliy вне форума Ответить с цитированием
Старый 02.09.2014, 14:28   #62
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Долго у вас получается...
Мой вариант
Вложения
Тип файла: rar Konvertor.rar (52.0 Кб, 20 просмотров)
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 02.09.2014, 15:20   #63
Uliy
Пользователь
 
Регистрация: 24.07.2014
Сообщений: 38
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
Мой вариант
у меня вопрос а каким образом формируется документ tmx ?
Uliy вне форума Ответить с цитированием
Старый 02.09.2014, 15:41   #64
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Цитата:
Сообщение от Uliy Посмотреть сообщение
у меня вопрос а каким образом формируется документ tmx ?
Программа то перед глазами! Но в отдельном модуле
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 02.09.2014, 15:58   #65
oksalan
Пользователь
 
Регистрация: 28.02.2012
Сообщений: 12
По умолчанию

вот и мне было бы интересно каким способом проходит процесс, можете выложить плиз ?
oksalan вне форума Ответить с цитированием
Старый 02.09.2014, 16:34   #66
Uliy
Пользователь
 
Регистрация: 24.07.2014
Сообщений: 38
По умолчанию

правильно ди я поняла код?
Код:
procedure TransformTxt2Tmx(const Src,Dest:string;FieldsFormat:array of TFieldFormat);
var
  SrcStrings,DestStrings:TStringList;
  i,j,Line:Integer;
  SrcField,DestField:string;
  SrcValue,DestValue:string;
begin
  SrcStrings:=TStringList.Create;// определяем объект списка
  try//для чего вот это?
    //обращаемся к файлу
    SrcStrings.LoadFromFile(Src);
    SrcStrings.NameValueSeparator:=':';
    DestStrings:=TStringList.Create;
    try
      //дописываем tmx файл, т.е. то что обычно изменяется 
      TmxMakeHeader(DestStrings);//это сообщение о том что при создании tmx файла что пишется после header?
      DestStrings.Add ('<body>');//создание тела
      for i:=Low(FieldsFormat) to High(FieldsFormat) do//выполняем построение файла пока txt файл не закончится
      begin
        Line:=1;//начинаем с первой строки
        while Line<SrcStrings.Count-1 do//до тех пор пока не дойдет до последнего обзаца
        begin
          SrcField:=Format(FieldsFormat[i].SrcFormat,[Line]);//берем i-ую строку
          SrcValue:=SrcStrings.Values[SrcField];//запоминаем данный абзац
          if Length(SrcValue)=0 then Break;//если в нем присутствуют символы, т.е. он не пустой то заполняем поле name

          DestStrings.Add (' <tu creationdate="20140819T140109Z"creationid="NICI">');
          DestStrings.Add ('     <tuv xml:lang="RU-EN">');
          DestStrings.Add ('       <seg>'+ SrcValue +'</seg>');  //поле name_ru
          DestStrings.Add ('     </tuv>');
          for j:=Low(FieldsFormat[i].DestFormats) to//теперь выполняем тот же самый цикл для поля en
        High(FieldsFormat[i].DestFormats) do
          begin
            DestField:=Format(FieldsFormat[i].DestFormats[j],[Line]);
            DestValue:=SrcStrings.Values[DestField];
            if Length(DestValue)=0 then DestValue:='Sorry! Not translated!';
            DestStrings.Add ('     <tuv xml:lang="RU-RU">');
            DestStrings.Add ('       <seg>'+DestValue+ '</seg>'); //из поля name_en
            DestStrings.Add ('     </tuv>');
          end;
          DestStrings.Add (' </tu>');
          if SrcField=FieldsFormat[i].SrcFormat then Break;//если символов больше не имеется в данном абзаце то выходим
          Inc(Line);.//где-то встречала в учебниках -не могу вспомнить?
        end;
      end;
       //дописываем стандартные последние строчки tmx документа,т.е. его закрываем
      DestStrings.Add('</body>');
      DestStrings.Add('</tmx>');
      DestStrings.SaveToFile(Dest);
    finally
      DestStrings.Free;//что-то типо очищение 'папки'
    end;
  finally
    SrcStrings.Free;
  end;
end;
Uliy вне форума Ответить с цитированием
Старый 02.09.2014, 16:45   #67
Uliy
Пользователь
 
Регистрация: 24.07.2014
Сообщений: 38
По умолчанию

да еще момент
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  FieldsFormat:array of TFieldFormat;//объявляем для обмена тектовой информации
begin
  SetLength(FieldsFormat,2);//для чего изменяем размер строки на 2?Для определения en,ru..
  FieldsFormat[0].SrcFormat:='Name_en';//теперь берем первую строку
  SetLength(FieldsFormat[0].DestFormats,3);
  FieldsFormat[0].DestFormats[0]:='Name_ru';
  FieldsFormat[0].DestFormats[1]:='Name_fr';
  FieldsFormat[0].DestFormats[2]:='Name_es';

  FieldsFormat[1].SrcFormat:='Ab%d_en';//берем n-ую строку
  SetLength(FieldsFormat[1].DestFormats,3);//?
  FieldsFormat[1].DestFormats[0]:='Ab%d_ru';
  FieldsFormat[1].DestFormats[1]:='Ab%d_fr';
  FieldsFormat[1].DestFormats[2]:='Ab%d_es';

  TransformTxt2Tmx(Edit1.Text,//берем файл с именем из поля edit
ChangeFileExt(Edit1.Text,'.tmx'),//? проводится обменинфы?
FieldsFormat);//?
Uliy вне форума Ответить с цитированием
Старый 02.09.2014, 16:53   #68
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Все верно...
TransformTxt2Tmx(файлисточник,файлн азначение, в FieldsFormat загружаются форматы)
единственное что коробит так это xml:lang="RU-RU" на все языки
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 02.09.2014, 17:01   #69
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Цитата:
Сообщение от Uliy Посмотреть сообщение
правильно ди я поняла код?
Код:
procedure TransformTxt2Tmx(const Src,Dest:string;FieldsFormat:array of TFieldFormat);
var
  SrcStrings,DestStrings:TStringList;
  i,j,Line:Integer;
  SrcField,DestField:string;
  SrcValue,DestValue:string;
begin
  SrcStrings:=TStringList.Create;// определяем объект списка
  try//для чего вот это?//Привыкай это защита от ошибок
    //обращаемся к файлу
    SrcStrings.LoadFromFile(Src);
    SrcStrings.NameValueSeparator:=':';
    DestStrings:=TStringList.Create;
    try
      //дописываем tmx файл, т.е. то что обычно изменяется 
      TmxMakeHeader(DestStrings);//это сообщение о том что при создании tmx файла что пишется после header?//пишется неизменяемый от файла к файлу хлам
      DestStrings.Add ('<body>');//создание тела
      for i:=Low(FieldsFormat) to High(FieldsFormat) do//выполняем построение файла пока txt файл не закончится//неверно, перебираются форматы/языки перевода
      begin
        Line:=1;//начинаем с первой строки
        while Line<SrcStrings.Count-1 do//до тех пор пока не дойдет до последнего обзаца//и никогда не дойдет :) раньше брекнится
        begin
          SrcField:=Format(FieldsFormat[i].SrcFormat,[Line]);//берем i-ую строку
          SrcValue:=SrcStrings.Values[SrcField];//запоминаем данный абзац
          if Length(SrcValue)=0 then Break;//если в нем присутствуют символы, т.е. он не пустой то заполняем поле name

          DestStrings.Add (' <tu creationdate="20140819T140109Z"creationid="NICI">');
          DestStrings.Add ('     <tuv xml:lang="RU-EN">');//<<языки тут править надо...
          DestStrings.Add ('       <seg>'+ SrcValue +'</seg>');  //поле name_ru
          DestStrings.Add ('     </tuv>');
          for j:=Low(FieldsFormat[i].DestFormats) to//теперь выполняем тот же самый цикл для поля en// и для поля fr и es - сколько перечислишь...
        High(FieldsFormat[i].DestFormats) do
          begin
            DestField:=Format(FieldsFormat[i].DestFormats[j],[Line]);
            DestValue:=SrcStrings.Values[DestField];
            if Length(DestValue)=0 then DestValue:='Sorry! Not translated!';
            DestStrings.Add ('     <tuv xml:lang="RU-RU">');//<<языки тут править надо...
            DestStrings.Add ('       <seg>'+DestValue+ '</seg>'); //из поля name_en
            DestStrings.Add ('     </tuv>');
          end;
          DestStrings.Add (' </tu>');
          if SrcField=FieldsFormat[i].SrcFormat then Break;//если символов больше не имеется в данном абзаце то выходим//неверно. это на случай "неформатируемости строки" или подразумевается одна строка типа Name_en
          Inc(Line);.//где-то встречала в учебниках -не могу вспомнить? Инкремент или +1
        end;
      end;
       //дописываем стандартные последние строчки tmx документа,т.е. его закрываем
      DestStrings.Add('</body>');
      DestStrings.Add('</tmx>');
      DestStrings.SaveToFile(Dest);
    finally
      DestStrings.Free;//что-то типо очищение 'папки'//типо безоговорочное вычищение ресурсов
    end;
  finally
    SrcStrings.Free;
  end;
end;
и что за допрос с пристрастием? Я попал или нет? формат выдержан? там еще левые поля типа RmaAb1 - че с ними делать?
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 02.09.2014 в 17:06.
Slym вне форума Ответить с цитированием
Старый 02.09.2014, 17:10   #70
Uliy
Пользователь
 
Регистрация: 24.07.2014
Сообщений: 38
По умолчанию

Просто я хочу разобраться и выяснить правильно ли я поняла :-)
Поля RmaAb1 не нужны, т.е. чтобы было видно что происходит выборка


Последний вопрос не могу найти в коде как происходит обращение к имени файл, который нужно преоброзовать
Код:
 TransformTxt2Tmx(Edit1.Text,//берем файл с именем из поля edit, почему если самим выбирать путь к файлу то не обращается
ChangeFileExt(Edit1.Text,'.tmx'),//? проводится обменин файлами, т.е. сохраняет с тем именем который указан
FieldsFormat);
и как сохраняется

Последний раз редактировалось Uliy; 02.09.2014 в 17:15.
Uliy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
pdf конвертор VAnj2607 Помощь студентам 6 01.05.2011 16:55
создать конвертор nurgali Помощь студентам 0 09.12.2010 09:57
Конвертор ZORRO2005 Microsoft Office Excel 16 26.05.2008 10:50
Конвертор Djarx БД в Delphi 14 27.04.2008 17:04
Конвертор IB в FB SunKnight БД в Delphi 1 29.03.2008 20:10