7 страниц V < 1 2 3 4 > »         
> Чтение файлов .sms, сделанных программой SMSBackUp, Уважаемые кодеры, есть просьба!
Serg c650
сообщение 3.4.2007, 8:58


Поэт?!
*****

Группа: Пользователи
Сообщений: 319
Регистрация: 26.10.2005
Пользователь №: 55 954
Модель телефона: Fly-Ying F003

Рейтинг: 87



Valleo, а я в Си не шарю, тока дельфи((

В принципе прогу можно сделать в таком виде:
Номер того кому пишем
Сама смска

Кнопочку для скачки и т.д. и т.п.

Больше ни чё не надо??
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Valleo
сообщение 3.4.2007, 9:19


Гуру
******

Группа: Почетные МотоФаны
Сообщений: 728
Регистрация: 21.10.2005
Из: Находка
Пользователь №: 55 219
Модель телефона: Z3
Прошивка: 0DR

Рейтинг: 692.5



Serg c650,
Думаю программу надо такую:
по меню: Файл->Открыть, Файл->Сохранить как txt, Файл->Закрыть, ну и About кнечно же =)
по самой функциональности:
поля "Date", "From", "To", "Parts" (сколько частей смс)
и поле с текстом смс.

В тхт сохранять все поля поочереди через перенос строки.
Ну и фиксированный размер окна. Собственно это ToDo для красивой работоспособной программы.

Как "наворот" можно сделать папочку-архив, куда будут скидываться папки с смс (с одним, двумя, тремя и т.д. подуровнями), и по которым можно будет внутри программы лазить (в виде дерева к примеру панелька слева). Для удобства использования наворота - всплывающее окошко над смс в виде облачка, которая под курсором, в котором поле From и кусочек текста смс в несколько строчек. Думаю если делать навигацию по папке - то только по фиксированной, а не Мой компьютре и так далее как в проводнике wink.gif

Дизайн думаю не стоит выдумывать - пусть держит стандартный виндосовский.

Вот собственно что мне бы хотелось видеть в такой программе wink.gif

Сообщение отредактировал Valleo - 3.4.2007, 9:25
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Serg c650
сообщение 3.4.2007, 17:18


Поэт?!
*****

Группа: Пользователи
Сообщений: 319
Регистрация: 26.10.2005
Пользователь №: 55 954
Модель телефона: Fly-Ying F003

Рейтинг: 87



Valleo, про навороты не совсем понятно. Ты хочешь, чтоб прога скинула весь бэкап в папку, а потом пользователь оттуда уже выбирал бы смски для чтения?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
dvsdigiman
сообщение 3.4.2007, 19:59


Интересующийся
**

Группа: Пользователи
Сообщений: 96
Регистрация: 21.11.2006
Пользователь №: 107 629
Модель телефона: V3i
Прошивка: 03.05R

Рейтинг: 12



Valleo, а куда же тогда дальше передается m_mySegmentaI и m_myBodyTextString?

И верно ли, что если m_myTypeB=1 и Count>0, то смска одиночная, и вслед за Count идет само тело смски?
Иначе m_mySegmentaI заполняется набором непонятных чисел...

У кого есть инфа как переводить UTF-8 в Win1251?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Serg c650
сообщение 4.4.2007, 10:16


Поэт?!
*****

Группа: Пользователи
Сообщений: 319
Регистрация: 26.10.2005
Пользователь №: 55 954
Модель телефона: Fly-Ying F003

Рейтинг: 87



Цитата
У кого есть инфа как переводить UTF-8 в Win1251?

На форумы по программированию зайди
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Valleo
сообщение 4.4.2007, 12:00


Гуру
******

Группа: Почетные МотоФаны
Сообщений: 728
Регистрация: 21.10.2005
Из: Находка
Пользователь №: 55 219
Модель телефона: Z3
Прошивка: 0DR

Рейтинг: 692.5



Цитата
Valleo, про навороты не совсем понятно. Ты хочешь, чтоб прога скинула весь бэкап в папку, а потом пользователь оттуда уже выбирал бы смски для чтения?

Нет. Чтобы например была папка рядом с программой, в которую пользователь сам (вручную, незачем усложнять программу вскими импортами) копирует папки с смсками или сами смски. А прога уже работает с этой папкой, выстраивая дерево файлов и папок начиная с именно этой папки...
Ну надеюсь ты понял =)

Добавлено позже (4.4.2007, 23:02):
Цитата
Иначе m_mySegmentaI заполняется набором непонятных чисел...


Сорьки, вот кусок кода:

Код

   public byte getType()
    {
        return m_myTypeB;
    }

    public Date getTimestamp()
    {
        return m_myTimestampDate;
    }

    public String _getFromAddressvString()
    {
        return null != m_myFromAddressString ? new String(m_myFromAddressString) : null;
    }

    public String _getToAddressvString()
    {
        return null != m_myToAddressString ? new String(m_myToAddressString) : null;
    }

    public int getSize()
    {
        return m_myDataaB.length;
    }

    public int _getSegmentsvI()
    {
        return m_mySegmentaI.length;
    }

    public String _getBodyTextvString()
        throws IllegalArgumentException
    {
        if(1 == m_myTypeB)
            return m_myBodyTextString;
        if(3 == m_myTypeB)
            return null;
        else
            throw new IllegalArgumentException("Wrong message type: not textual message");
    }

    public boolean _isUnreadvZ()
    {
        return 0 == m_myStateReadB;
    }

    public boolean _isLockedvZ()
    {
        return m_myStateLockB > 0;
    }

думаю из этого понятно как получается кол-во сегментов wink.gif
Ну и все остальное как получается...

Добавлено позже (4.4.2007, 23:06):
Цитата
И верно ли, что если m_myTypeB=1 и Count>0, то смска одиночная, и вслед за Count идет само тело смски?

Видимо получается так...
Но если смс многосоставная - это там ужас какой то =)

И вот еще:

Код

    public static char byte2Char(int i){
        if(i < 0) i += 256;
        char c = (char)i;
        if(c == '\n') return c;
        if(c == '\r') return c;
        if(c == '\t') return c;
        if(c < ' ') return ' ';
        if(c < '\200') return c;
        if(i == 168) return '\u0401';
        if(i == 184) return '\u0451';
        if(i == 179) return '\u0456';
        if(i == 178) return '\u0406';
        if(i == 191) return '\u0457';
        if(i == 175) return '\u0407';
        if(i == 186) return '\u0454';
        if(i == 170) return '\u0404';
        if(i >= 192 && i <= 255) return (char)(i + 848);
        else return ' ';
    }

    public static int char2Byte(char c){
        char c1 = c;
        if(c == '\n') return c;
        if(c == '\r') return c;
        if(c == '\t') return c;
        if(c < ' ')   return 32;
        if(c < '\200') return c;
        if(c1 == '\u0401') return 168;
        if(c1 == '\u0451') return 184;
        if(c1 == '\u0456') return 179;
        if(c1 == '\u0406') return 178;
        if(c1 == '\u0457') return 191;
        if(c1 == '\u0407') return 175;
        if(c1 == '\u0454') return 186;
        if(c1 == '\u0404') return 170;
        if(c1 >= '\u0410' && c1 <= '\u044F') return c1 - 848;
        else return 32;
    }

//*************************************************//

    public static String ascii2Utf(String s){
        String s1 = "";
        try{
            byte abyte0[] = s.getBytes();
            for(int i = 0; i < abyte0.length; i++) s1 += String.valueOf(byte2Char(abyte0[i]));
        }
        catch(Exception exception){
            s1 = "";
        }
        return s1;
    }

    public static String utf2Ascii(String s){
        String s1 = "";
        try{
            char ac[] = s.toCharArray();
            for(int i = 0; i < ac.length; i++) s1 += (char)char2Byte(ac[i]);
        }
        catch(Exception exception){
            s1 = "";
        }
        return s1;
    }


Вроде то что ты ищешь =)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Serg c650
сообщение 4.4.2007, 16:44


Поэт?!
*****

Группа: Пользователи
Сообщений: 319
Регистрация: 26.10.2005
Пользователь №: 55 954
Модель телефона: Fly-Ying F003

Рейтинг: 87



Valleo, понял, спасибо)) А какая кодировка в этих файлах (*.sms)?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
dvsdigiman
сообщение 4.4.2007, 17:19


Интересующийся
**

Группа: Пользователи
Сообщений: 96
Регистрация: 21.11.2006
Пользователь №: 107 629
Модель телефона: V3i
Прошивка: 03.05R

Рейтинг: 12



пойду жевать...

Serg c650, кодировка Unicode - UCS-2 Big Endian
Вот только начальная позиция текста может быть разной,
как раз-таки из-за этого в прогах типа AkelPad пропадают куски текста...

Добавлено позже (4.4.2007, 21:52):
Получается примерно так:
0. Начало (4 байта)
1. Заголовок
2. хз какие-то блоки wink.gif

В начале:
0000: byte -> версия (=01)
0001: byte -> кодировка (=01)
0002: int -> [размер_файла]-4

В заголовке:
0004: int -> размер заголовка (фактически численно совпадает со смещением первого "хз_блока")
0006: string -> папка (Inbox,...)
?: int -> идентификатор (?)
?+2: byte -> тип (=01 или 03) (?)
?+3: long -> дата+время (8 байт)
?+11: string -> отправитель (например, sms://+1234567890)
??: string -> получатель (обычно пустая строка - 1 байт = 00)
???: byte -> прочитано/непрочитано (=00 - прочитано, другие значения не смотрел...)
???+1: byte -> заблокировано/незаблокировано (=00 - нет)
???+2: int -> "count" => Если count>0, то смска одиночная и сразу за count идет тело смски длиной count байт (реальная длина - count/2 символов), иначе ничего...
????: byte -> N - кол-во блоков, равное кол-ву страниц смс
???+1: -> таблица из N значений (int), каждое значение - размер блока.
Т.е. размеры_всех_блоков + размер_заголовка + размер начала (=4) = размер файла

Далее идут один за другим N блоков...
Вот тут пока что Ж*ПА.... Если приглядется, то в блоках, кроме текста присутствует также номер отправителя и номер смс-центра, ну и есессно куча всякой, пока непонятной хрени...

Если смска одиночная, то тело смски помещается в заголовок, при этом его длина входит в длину заголовка... Кодировка при этом - что-то подобное на юникод, но не пойму что... Также при этом все-равно присутствует 1 хз_блок, в котором тоже присутствует текст смски (уже в кодировке юникод)

Возможно хз_блоки имеют структуру схожую со структурой симов 007D, вот только размер блоков по 600-800 байт...
Также возможно структура блоков такая же, которая приходит от оператора (тут уже надо pdu глянуть)

Valleo, поищи, может где-нибудь все таки есть парсинг этих хз_блоков
И вообще может выложи то, откуда ты выдирал этот класс...
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Valleo
сообщение 4.4.2007, 21:49


Гуру
******

Группа: Почетные МотоФаны
Сообщений: 728
Регистрация: 21.10.2005
Из: Находка
Пользователь №: 55 219
Модель телефона: Z3
Прошивка: 0DR

Рейтинг: 692.5



dvsdigiman,
Я уже все выложил =)

?+2: byte -> тип (=01 или 03) (?)
01 - SMS
03 - MMS

В смс пишется обязательно насколько я понял номер смс-цента, номер отправителя и номер получателя. (т.е. 3 номера)

Про блоки - вот тоже не понимаю их структуры... Но то что кол-во блоков = количество смс в 1 смс-ке это факт. Значит надо парсить каждый блок чтобы извлечь само сообщение.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Serg c650
сообщение 5.4.2007, 11:07


Поэт?!
*****

Группа: Пользователи
Сообщений: 319
Регистрация: 26.10.2005
Пользователь №: 55 954
Модель телефона: Fly-Ying F003

Рейтинг: 87



Чё-то не получается у меня эти каракули из файла в ANSI перевести. Кто в Delphi это умеет делать, помогите.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Чтение файлов .sms, сделанных программой SMSBackUp, Уважаемые кодеры, есть просьба! · Программы для работы с смс, справочником и другими файлами · Forum
 

7 страниц V < 1 2 3 4 > » 
Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 20.11.2017, 0:12

Форум живёт: