Как разбить строковые значения в lua. ошибка - PullRequest
0 голосов
/ 01 апреля 2012

Так что я пытаюсь разбить только строку, которую я прочитал через файл CSV. Строка содержит несколько значений, таких как first_name, last_name, email_address и т. Д. Я хочу использовать функцию split, чтобы присвоить все эти значения моим конкретным переменным. Пока это то, что у меня есть:

first_name, last_name, email_address, street_address, city, state = split(line, ",")
person_record = {first_name, last_name, email_address, street_address, city, state}

Я получаю сообщение об ошибке в lua, в котором говорится: «Попытка вызвать глобальный« split »(нулевое значение)

Я безуспешно гуглил сообщение об ошибке. Возможно ли мне включить библиотеку, чтобы использовать функцию разделения ????

Или я просто неправильно использую функцию разделения. Любая помощь с благодарностью: /

Ответы [ 2 ]

5 голосов
/ 01 апреля 2012

Я не верю, что Lua имеет функцию split, поскольку вы пытаетесь ее использовать. Эта страница представляет собой подробное описание того, как разбивать (и объединять) строки в Lua.

1 голос
/ 03 августа 2012

вы можете попробовать эту Python-подобную реализацию split, которую я написал.

Аргументы:

  • s - строка, которую вы хотите разбить

  • pattern - это разделитель (символ или строка)

  • maxsplit - самое большее это разделение будет выполнено

Возвращает таблицу, содержащую разбиения.

Примеры:

split ('potato', 't') -> {'po', 'a', 'o'}

split ('potato', 't', 1) --> {'po', 'ato'}

split ('potato', 'ta') -> {'po', 'to'}

split ('potato', 'foo') --> {'potato'}

split = function(s, pattern, maxsplit)
  local pattern = pattern or ' '
  local maxsplit = maxsplit or -1
  local s = s
  local t = {}
  local patsz = #pattern
  while maxsplit ~= 0 do
    local curpos = 1
    local found = string.find(s, pattern)
    if found ~= nil then
      table.insert(t, string.sub(s, curpos, found - 1))
      curpos = found + patsz
      s = string.sub(s, curpos)
    else
      table.insert(t, string.sub(s, curpos))
      break
    end
    maxsplit = maxsplit - 1
    if maxsplit == 0 then
      table.insert(t, string.sub(s, curpos - patsz - 1))
    end
  end
  return t
end

Надеюсь, это поможет - ^. ^ - Пока

...