Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   Добавление и удаление записи в txt файл (http://www.flasher.ru/forum/showthread.php?t=117341)

KiL33 24.10.2008 20:06

Добавление и удаление записи в txt файл
 
Каким образом, из динамик поля флеша,я могу сохранить информацию в txt файл не перезаписывая уже содержащуюся инфу в файле, а дописав её в конец.

2. Как удалить информацию из txt файла?

И на засыпку, можно ли записывать автоматом дату и время в конец файла при добавлении записи.

alexcon314 24.10.2008 21:36

На засыпку: что вы используете? AIR? Zinc? что-то еще?
За цинк отвечу:

Код:

mdm.FileSystem.saveFile(("file_name","data_to_save");// прежде, чем добвалять данные, надо создать файл
mdm.FileSystem.appendFile("file_name","data_to_save");

Не рекомендуется за один раз сохранять более 100к текста.
Добавление даты на автомате, по-моему, очевидно.
Лог пытаетесь вести?
Zinc позвлоляет подключить длл с любым нужным вам функционалом, на случай, если того, что есть, мало.

KiL33 24.10.2008 23:18

Цитата:

Сообщение от alexcon314 (Сообщение 772719)
Лог пытаетесь вести?

Ключевое слово здесь “пытаюсь” )
Использую Zinc.

Спасибо, инфа сохраняется.


Цитата:

Сообщение от alexcon314 (Сообщение 772719)
Добавление даты на автомате, по-моему, очевидно.

Не знаю, почему это очевидно, ни одного похожего урока, примера я не смог найти.
И удалить инфу ещё не получается.

Почему не рекомендуется за один раз сохранять более 100к текста?

alexcon314 24.10.2008 23:54

Дату надо вписывать вам же, за вас этого ни кто делать не будет, это очевидно, не так ли?
Напимер:
Код:

function AddLog (data){
var time = getTimer(); // или юзать класс Date.
mdm.FileSystem.appendFile("file_name",time+": "+ "data");
}
AddLog("случилось страшное...");

Имеются основания считать, что при большом объеме сохраняемых данных могут быть глюки. Например вывалится флэшовый алерт о необходимости увеличить объем разрешенного локалного сохранения данных. Просто по-чаще вызывайте AddLog, записывая каждый раз понемногу. Впрочем, можете поэкспериментировать.
Удалить данные из лога - это немного не вписывается в понятие "лог". Тем не менее выход найти можно. Например подгрузить лог, распарсить, вырезать ненужное и сохранить обратно. В факе есть пример построчного чтения файла при помощи VBScript. Встроенных функций для подобных действий в цинке нет.

KiL33 25.10.2008 10:42

Пишу вот так:
Код:

function AddLog (data){
        var time:Date = new Date();
        var min = time.getMinutes();
        var hour = time.getHours();
var Month = time.getMonth();
var Year = time.getFullYear();
        var Day = time.getDay();

mdm.FileSystem.appendFile("my.txt",Day + "." +Month + "." + Year + "  "+hour + ":" + min + " : " + t);
}
AddLog("случилось страшное...родился ещё один Флесшер…) ");

Результат, какой-то китайский календарь (6.9.2008 12:26), (тестил сегодня(25.10.08))
Т.е. день и месяц не совпадают с настоящим, часы и год нормально.

Пришлось описать каждый из месяцев тыкав флеш носом: ”Смотри, это сентябрь, а за сентябрём идет октябрь…)” .
Код:

DateOfDay = new Date();
        if (DateOfDay.getDate()<10) {
                day = "0"+DateOfDay.getDate();
        } else {
                day = DateOfDay.getDate();
        }
        month1 = DateOfDay.getMonth()+1;
        if (month1 == 1) {
                month = "ЯНВАРЯ";
        }
        if (month1 == 2) {
                month = "ФЕВРАЛЯ";
        }
        if (month1 == 3) {
                month = "МАРТА";
        }
        if (month1 == 4) {
                month = "АПРЕЛЯ";
        }
        if (month1 == 5) {
                month = "МАЯ";
        }
        if (month1 == 6) {
                month = "ИЮНЯ";
        }
        if (month1 == 7) {
                month = "ИЮЛЯ";
        }
        if (month1 == 8) {
                month = "АВГУСТА";
        }
        if (month1 == 9) {
                month = "СЕНТЯБРЯ";
        }
        if (month1 == 10) {
                month = "ОКТЯБРЯ";
        }
        if (month1 == 11) {
                month = "НОЯБРЯ";
        }
        if (month1 == 12) {
                month = "ДЕКАБРЯ";
        }
        year = DateOfDay.getFullYear();

По моему, это как-то глупо, но тем не менее работает.

Странно, почему бы не сделать как в том же PHP
Код:

$result_time = date("d.m.Y H:i");
Одна строчка, а здесь все это выросло вот в такое безобразие.

P.S. Странно, что Цинком не предусмотрено удаление инфы. Это то-же самое, что и машина без тормозов.

Agent007 25.10.2008 14:18

а так чо?
Код:

var _date:Date = new Date();
var datestr:String = _date.getDate()+"."+(_date.getMonth()+1)+"."+_date.getFullYear() + " " + _date.getHours() + ":" +_date.getMinutes();
mdm.FileSystem.appendFile("my.txt",datestr)


iNils 25.10.2008 14:31

Цитата:

Сообщение от KiL33 (Сообщение 772778)
Пришлось описать каждый из месяцев тыкав флеш носом: ”Смотри, это сентябрь, а за сентябрём идет октябрь…)” .
Код:

        month1 = DateOfDay.getMonth()+1;
        if (month1 == 1) {
                month = "ЯНВАРЯ";
        }
        if (month1 == 2) {
                month = "ФЕВРАЛЯ";
        }
...


Есть такая штука, называется массив, в нем нумерация элементов как раз идет с 0, как номера месяцев. А то пхп-пхп...
А еще есть else if, ну это так, чтобы знали и не писали по 12 ифоф которые каждые раз срабатывают.

KiL33 25.10.2008 17:22

Ещё одна проблема.

Русский текст не читается, причем в буквальном смысле)

Вот с этой приблудой текст отображается корректно
System.useCodepage = true;
Но про это было мною уже столько прочитано, что можно сделать очевидный вывод
System.useCodepage – есть ЗЛО.

Ставлю кодировку в записываемый файл UTF, но после добавления записи файл снова в ANSI.

С этим можно что-нибудь сделать???

alexcon314 25.10.2008 23:29

Цинк пишет в АНСИ. Выставлять какую-либо кодировку в файле бесполезно. Если нужна другая кодировка - пишите длл-модуль с функционалом записи в файл и перекодировкой строк в нужную code page. Подключаете эту длл к цинк-приложению и все дела. Я об этом сказал вам в самом начале. Самый ценный mdm-класс - то mdm.DLL(). С его помощью можно подключить любую длл и вызвать любую WIN-API функцию.
При всем богатстве цинк-API всегда чего-то не хватает D:.
Цитата:

Странно, что Цинком не предусмотрено удаление инфы.
Ну почему же..
Код:

mdm.FileSystem.deleteFile("file_to_delete");
Вам мало? Работа с отдельными строками текстового файла, поиск и удаление/вставка строк/символов - это задача, где удаление инфы лишь малая и самая простая составляющая.
В WIN API есть две подходящие для этой задачи функции.
GetPrivateProfileString и WritePrivateProfileString. Юзайте их через длл. Кстати, и для перекодировки можно найти функции готовые.

KiL33 26.10.2008 09:52

dll пока для меня лес дремучий, но попытаюсь разобраться, раз уж на то пошло.
Цитата:

Сообщение от alexcon314 (Сообщение 772842)
Кстати, и для перекодировки можно найти функции готовые.

Не подскажите где именно их можно найти.


Часовой пояс GMT +4, время: 20:47.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.