Перейти к содержимому
  • 0
RadioNurshat

Неправильная работа функции

Вопрос

Привет всем, это снова я. 

Я пока еще нуб, но как смог организовал рабочую часть магазина, но часть не работает:

        --Нахождение последнего номера заказа
	local shopCounter = "Shop/shopcount.cfg"
	local function getLastShopNumber()
	  _G.cofile = io.open(shopCounter, "r")
	  stroka = cofile:read("*a")
	  local lastnumber = tonumber(serialization.unserialize(stroka))
	  return lastnumber
	end
	--Изменение последнего номера заказа
	local function changeLastShopNumber()
	 _G.cofile = io.open(shopCounter, "w")
	 cofile:write(serialization.serialize( getLastShopNumber() + 1))
	 cofile:close() 
	end

в файле shopcount.cfg записан номер заказа, сначала 1. 

getLastShopNumber() выдает nil со 2 раза, почему то значение в файле shopcount удаляется. Почему? Вроде все правильно сделал

Изменено пользователем RadioNurshat

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

Я пока еще нуб, но как смог организовал рабочую часть магазина, но часть не работает:

в файле shopcount.cfg записан номер заказа, сначала 1. 

getLastShopNumber() выдает nil со 2 раза, почему то значение в файле shopcount удаляется. Почему? Вроде все правильно сделал

Ну почему Вы так любите технологии динозавров? Запись в файл, как в колхозе сохраняем построчно. Ну что это такое вообще? Это никуда не годится.

 

Вы слышали что-нибудь про JSON? Очень удобная штука однако. И мало то очень удобно использовать ее для вывода чего угодно, а не ваши cfg с 1... 2... 3... 4.. 5... построчно.

Специально для вас сделал небольшой ребрендинг вашего кода, добавив 2 функции для чтения и сохранения JSON-а.

И для его использования необходима лишь легковесная JSON библиотека. Скачать ее можно тута

 

Ну и сам страшный код по спойлером:

 

 

local JSON = require("json")
local shopCounter = "Shop/shopcount.json"

local function saveTable(t, filename)
    local file = io.open(filename, "w")
    if file then
        local contents = JSON:encode(t)
        file:write(contents)
        file:close(file)
        return true
    end
end


local function loadTable(filename)
    local contents = ""
    local Table = {}
    local file = io.open(filename, "r")
    if file then
        local contents = file:read("*a")
        Table = JSON:decode(contents);
        io.close(file)
        return Table
    end
    return nil
end

local function changeLastShopNumber()
local lastvalue = loadTable(shopCounter)
table.insert(lastvalue,tonumber(#lastvalue) + 1)
saveTable(lastvalue, shopCounter)
end

local function getLastShopNumber()
local lastvalue = loadTable(shopCounter)
return #lastvalue
end


changeLastShopNumber() -- ваша функция которая сохраняет последний номер заказа
print(getLastShopNumber())-- ваша функция для вывода последнего номер заказа

 

 

P.S. Чтобы скрипт "не плювался" на вас attempt-ами, сразу создайте файл shopcount.json и добавьте в него [] и все.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  1. Почему юзаешь _G.cofile, а не local cofile?
  2. Почему не закрываешь файл в getLastShopNumber?
  3. local stroka = cofile:read("*a") должно быть.
  4. serialization.serialize не нужен. Используй tostring(getLastShopNumber() + 1).
  5. serialization.unserialize тоже не нужен. Уже есть tonumber.

Итого:

-- Нахождение последнего номера заказа
local shopCounter = "Shop/shopcount.cfg"

local function getLastShopNumber()
  local cofile = io.open(shopCounter, "r")
  local content = cofile:read("*a")
  cofile:close()
  return tonumber(content)
end

-- Изменение последнего номера заказа
local function changeLastShopNumber()
  local cofile = io.open(shopCounter, "w")
  cofile:write(tostring(getLastShopNumber() + 1))
  cofile:close()
end
Изменено пользователем Fingercomp

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Мы не ищем легких путей  :D

 

1352372.jpg

 

 

Он одно число хранит, зачем json

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Он одно число хранит, зачем json

А так хоть можно историю заказов хранить к примеру.

Ну судя по коду это точно не то что напоминает банк Тоторо даже.

Одни какие-то txt файлы с одним значением. Точно какой-то колхоз. 2017 год к нам пришел называется.

 

Ну ладно тогда я умываю руки и ухожу отсюда.

Я лишь дал автору может быть более универсальный способ на будущее.

А ему решать что юзать JSON или txt.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...