powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Конвертировать файл .vcs
19 сообщений из 19, страница 1 из 1
Конвертировать файл .vcs
    #38587353
Здравствуйте!

Столкнулся с проблемой. Из телефона вытащил данные календаря в формате vCalendar(*.vcs).
На каждое событие календаря свой файл
содержание следующее

BEGIN:VCALENDAR
VERSION:1.0
BEGIN:VEVENT
DTSTART:20071130T000000Z
DTEND:20071130T000000Z
AALARM:20071130T070000Z;;0;
X-EPOCAGENDAENTRYTYPE:ANNIVERSARY
X-BIRTHYEAR:2007
SUMMARY;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:=D0=90=D0=BB=D0=B5=D0=BD=
=D1=8B=D0=BD =D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9
RRULE:YM1 11 #0
END:VEVENT
END:VCALENDAR


необходимо из этих файлов получить один csv файл
конвертера подходящего так и не нашел. Если какие и работают, то не тянут все поля. например поле X-BIRTHYEAR

Конечная цель, это импортировать данные о днях рождения на смарт с андроидом 4.х
Что-то штатными средствами как-то не все получается.

Спасибо заранее.
...
Рейтинг: 0 / 0
Конвертировать файл .vcs
    #38587357
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а пример результирующего csv можно?
...
Рейтинг: 0 / 0
Конвертировать файл .vcs
    #38587361
ну вот примерно такой
...
Рейтинг: 0 / 0
Конвертировать файл .vcs
    #38587374
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может еще опишете, как вы из этого
Павловский ЮрийBEGIN:VCALENDAR
VERSION:1.0
BEGIN:VEVENT
DTSTART:20071130T000000Z
DTEND:20071130T000000Z
AALARM:20071130T070000Z;;0;
X-EPOCAGENDAENTRYTYPE:ANNIVERSARY
X-BIRTHYEAR:2007
SUMMARY;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:=D0=90=D0=BB=D0=B5=D0=BD=
=D1=8B=D0=BD =D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9
RRULE:YM1 11 #0
END:VEVENT
END:VCALENDARполучаете вот это:Павловский ЮрийВаля Борыка,,"05.02.2010 2:00:00","05.02.2010 2:00:00",,,,,"Public","30.12.1899 2:00:00","0",,
а то как-то недосуг читать документацию по обоим форматам
...
Рейтинг: 0 / 0
Конвертировать файл .vcs
    #38587401
Shocker.Pro,

Это я нашел прогу в инете, которая делает такой экспорт.
Но данные все не вытаскивает, поэтому надо бы что-то свое.

По большому две задачи:
-Из строк сделать столбцы
-и в поле SUMMARY проедоставить данные в четабельном виде.
...
Рейтинг: 0 / 0
Конвертировать файл .vcs
    #38587404
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок, тогда еще вопрос - почему эта тема именно в msoffice? принципиально на VBA сделать?

(я б написал программку ради практики, только не на VBA и не сейчас, до конца недели, если устроит)
...
Рейтинг: 0 / 0
Конвертировать файл .vcs
    #38587405
Shocker.Pro,

абсолютно не принципиально в чем написать.

до конца недели устроит.

единственное интересно как же перекодировать текст, если можно потом как-то в двух словах объяснить. Интересно чисто для себя.

в инете попалось описание функции "iconv"
вродибы умеет перекодировать, только это функция скорее для СИ наверное.

В любом случае спасибо. Результат можно отправить на почту admin771@mail.ru
...
Рейтинг: 0 / 0
Конвертировать файл .vcs
    #38587409
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павловский Юрийединственное интересно как же перекодировать текств платформе .NET есть встроенные конверторы кодировок
...
Рейтинг: 0 / 0
Конвертировать файл .vcs
    #38591333
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
готово
...
Рейтинг: 0 / 0
Конвертировать файл .vcs
    #38591961
Shocker.Pro,

Здравствуйте!

Спасибо за программку! Попробовал. Есть одни глючек. В поле имени вытаскивает только 4 символа.

DTSTART,DTEND,AALARM,X-EPOCAGENDAENTRYTYPE,X-BIRTHYEAR,SUMMARY;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8,RRULE
19860426T000000,19860427T000000,19860426T060000Z;;0;,ANNIVERSARY,1986,Алеш=,YM1 4 #0
19810127T000000,19810128T000000,19810127T070000Z;;0;,ANNIVERSARY,1974,Анан=,YM1 1 #0
19810408T000000,19810409T000000,19810408T060000Z;;0;,ANNIVERSARY,1974,Анже=,YM1 4 #0
19810328T000000,19810329T000000,19810328T070000Z;;0;,ANNIVERSARY,1975,Боби=,YM1 3 #0
19811217T000000,19811218T000000,19811217T070000Z;;0;,ANNIVERSARY,1961,Буря=,YM1 12 #0
19810322T000000,19810323T000000,19810322T070000Z;;0;,ANNIVERSARY,1974,Весе=,YM1 3 #0
19811026T000000,19811027T000000,19811026T070000Z;;0;,ANNIVERSARY,1981,Вита =,YM1 10 #0
19811102T000000,19811103T000000,19811102T070000Z;;0;,ANNIVERSARY,1977,Гану=,YM1 11 #0
...
Рейтинг: 0 / 0
Конвертировать файл .vcs
    #38591981
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в переносе на новую строку. Так как образца реального файла у меня не было, я предполагал, что строка с ФИО цельная. Дайте пожалуйста пару-тройку файлов для экспериментов.
...
Рейтинг: 0 / 0
Конвертировать файл .vcs
    #38592063
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну или вот попробуйте
...
Рейтинг: 0 / 0
Конвертировать файл .vcs
    #38592277
Shocker.Pro,

О, теперь все классно!
Огромное спасибо!

А в чем написана прога, можно код посмотреть?
...
Рейтинг: 0 / 0
Конвертировать файл .vcs
    #38592286
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павловский ЮрийА в чем написана прога, можно код посмотреть?WinForms, C#
код
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Text.RegularExpressions;

namespace vcsConvertor
{
  public partial class Form1 : Form
  {
    bool folderSelected = false;
    bool fileSelected = false;
    public Form1()
    {
      InitializeComponent();
      saveFileDialog1.Filter = "*.csv|*.csv";
    }

    private void btSelectFolder_Click(object sender, EventArgs e)
    {
      if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
      {
        lbFolder.Text = folderBrowserDialog1.SelectedPath;
        folderSelected = true;
        saveFileDialog1.InitialDirectory = folderBrowserDialog1.SelectedPath;
        if (fileSelected) btConvert.Enabled = true;
      }
    }

    private void btFile_Click(object sender, EventArgs e)
    {
      if (saveFileDialog1.ShowDialog() == DialogResult.OK)
      {
        lbFile.Text = saveFileDialog1.FileName;
        fileSelected = true;
        if (folderSelected) btConvert.Enabled = true;
      }
    }

    private void btConvert_Click(object sender, EventArgs e)
    {
      var headers = new List<string>(new string[] { "DTSTART", "DTEND", "AALARM", "X-EPOCAGENDAENTRYTYPE", "X-BIRTHYEAR", "SUMMARY;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8", "RRULE" });
      var list = new Dictionary<string, string>();
      string[] line;
      string t;
      var lineout = new List<string>();
      string prevQPKey = "";

      try
      {
        using (StreamWriter dest = new StreamWriter(saveFileDialog1.FileName,false, Encoding.UTF8))
        {
          fdLog.AppendText(string.Format("создан файл: {0}\n",saveFileDialog1.FileName));
          foreach (string p in headers) { lineout.Add(p); }
          dest.WriteLine(string.Join(",",lineout.ToArray()));

          try
          {
            DirectoryInfo folder = new DirectoryInfo(folderBrowserDialog1.SelectedPath);
            foreach (FileInfo file in folder.GetFiles("*.vcs"))
            {
              try
              {
                using (StreamReader source = new StreamReader(file.FullName))
                {
                  list.Clear();
                  lineout.Clear();
                  while (!source.EndOfStream)
                  {
                    line = source.ReadLine().Split(new Char[] {':'});
                    if (line.Length == 2)
                    {
                      if (line[0].Contains("QUOTED-PRINTABLE"))
                      {
                        line[1] = DecodeQuotedPrintable(line[1].TrimEnd('='), "utf-8");
                        prevQPKey = line[0];
                      }
                      else prevQPKey = "";
                      list[line[0]] = line[1];
                    }
                    else if (line.Length == 1 && line[0].Substring(0, 1) == "=" && prevQPKey != "")
                    {
                      list[prevQPKey] += DecodeQuotedPrintable(line[0].TrimEnd('='), "utf-8");
                    }
                  }
                }
                foreach (string p in headers)
                {
                  if (list.TryGetValue(p, out t)) lineout.Add(t);
                }
                dest.WriteLine(string.Join(",", lineout.ToArray()));
                fdLog.AppendText(string.Format("обработан файл: {0}\n", file.Name));
              }
              catch (Exception ex)
              {
                fdLog.AppendText(string.Format("ошибка при чтении файла: {0}\n", ex.Message));
              }
            }

          }
          catch (Exception ex)
          {
            fdLog.AppendText(string.Format("ошибка при работе с папкой: {0}\n", ex.Message));
          }

          fdLog.AppendText("операция завершена\n");
        }
      }
      catch (Exception ex)
      {
        fdLog.AppendText(string.Format("ошибка при записи файла: {0}\n", ex.Message));
      }
    }

    // http://stackoverflow.com/questions/11793734/code-for-encode-decode-quotedprintable
    // коверторы QPRINTABLE
    public static string DecodeQuotedPrintable(string input, string charSet)
    {
      Encoding enc;

      try
      {
        enc = Encoding.GetEncoding(charSet);
      }
      catch
      {
        enc = new UTF8Encoding();
      }

      var occurences = new Regex(@"(=[0-9A-Z]{2}){1,}", RegexOptions.Multiline);
      var matches = occurences.Matches(input);

      foreach (Match match in matches)
      {
        try
        {
          byte[] b = new byte[match.Groups[0].Value.Length / 3];
          for (int i = 0; i < match.Groups[0].Value.Length / 3; i++)
          {
            b[i] = byte.Parse(match.Groups[0].Value.Substring(i * 3 + 1, 2), System.Globalization.NumberStyles.AllowHexSpecifier);
          }
          char[] hexChar = enc.GetChars(b);
          input = input.Replace(match.Groups[0].Value, new String(hexChar));
        }
        catch
        { ;}
      }
      input = input.Replace("?=", "").Replace("\r\n", "");

      return input;
    }
  }
}

если хотите редактировать в студии - могу выложить сам проект
...
Рейтинг: 0 / 0
Конвертировать файл .vcs
    #38592328
Спасибо!

Я в студии не работаю. Просто интересно было как перекодировать УТФ

Спасибо, все понято!
...
Рейтинг: 0 / 0
Конвертировать файл .vcs
    #38592351
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павловский Юрийкак перекодировать УТФа utf никак и не перекодируется, выходной файл пишется в utf-8. Тут важно, что сам utf-8 поверх еще закодирован в quoted-printable
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Конвертировать файл .vcs
    #39532812
Ляксеич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, здравствуйте.
Уже несколько дней бьюсь с абсолютно аналогичной проблемой, но не помогает ни одна программа, даже Ваша. Казалось бы и соединяет в один файл, и конвертирует в .csv, а при импорте в google calendar пишет "Не удалось импортировать мероприятия: Не удаётся обработать файл iCal/CSV, причем и мои файлы и тот, что Юрий, как образец оставил.
Так у меня выглядит исходный .vcs:
BEGIN:VCALENDAR
VERSION:1.0
BEGIN:VEVENT
"UID;ENCODING=QUOTED-PRINTABLE:16062016113949403375=5B"
"SUMMARY;ENCODING=QUOTED-PRINTABLE;CHARSET=utf-8:="
=207=20=D0=B4=D0=B5=D0=BA=D0=B0=D0=B1=D1=80=D1=8F=201994=20=D0=B3=D0=BE=
=D0=B4=D0=B0=20-=20=D0=9C=D0=B5=D0=B6=D0=B4=D1=83=D0=BD=D0=B0=D1=80=D0=BE=
=D0=B4=D0=BD=D1=8B=D0=B9=20=D0=B4=D0=B5=D0=BD=D1=8C=20=D0=B3=D1=80=D0=B0=
=D0=B6=D0=B4=D0=B0=D0=BD=D1=81=D0=BA=D0=BE=D0=B9=20=D0=B0=D0=B2=D0=B8=D0=
#ИМЯ?
DTSTART:19941207T000000
DTEND:19941208T000000
X-EPOCAGENDAENTRYTYPE:ANNIVERSARY
CLASS:PUBLIC
SEQUENCE:0
X-METHOD:NONE
RRULE:YM1 12 21001207T000000
"AALARM;TYPE=X-EPOCSOUND;ENCODING=QUOTED-PRINTABLE:19941207T081500;;;z:=5Csystem=5CSystemSounds=5Calarm.wav"
LAST-MODIFIED:20160627T055334Z
PRIORITY:0
X-SYMBIAN-LUID:1357
END:VEVENT
END:VCALENDAR

Так после конвертации пяти файлов:

DTSTART,DTEND,AALARM,X-EPOCAGENDAENTRYTYPE,X-BIRTHYEAR,SUMMARY ENCODING=QUOTED-PRINTABLE CHARSET=UTF-8,RRULE
19941207T000000,19941208T000000,ANNIVERSARY,YM1 12 21001207T000000
20170707T000000,20170708T000000,ANNIVERSARY,YM1 7 21000707T000000
19460718T000000,19460719T000000,ANNIVERSARY,YM1 7 21000718T000000
19811207T000000,19811208T000000,ANNIVERSARY,YM1 12 21001207T000000
19451220T000000,19451220T000000,ANNIVERSARY,YM1 12 21001220T000000

Чего не хватает, не пойму, мозгов, наверное(. Может, что посоветуете?

Пример .vcs.
...
Рейтинг: 0 / 0
Конвертировать файл .vcs
    #39532891
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ляксеичи тот, что Юрий, как образец оставил.дело было давно, может формат файлов календаря поменялся? Попробуйте сделать экспорт мероприятий и сравнить со своим файлом
...
Рейтинг: 0 / 0
Конвертировать файл .vcs
    #39532925
Ляксеич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, спасибо за совет. Есть подозрение, что файлы моего календаря то ли некорректные, то ли с ошибками. Юрин файл-пример импортируется в Аутлук и корректно там отображается, - мои нет. Боюсь придётся в рукопашную весь календарь лопатить. В любом случае, за желание помочь - благодарю.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Конвертировать файл .vcs
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]