GOOSE
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Господа, требуется совет... Разбираю текстовый файл в массив, использую функцию Код: -- Конвертирование файла CSV в массив function CsvToArray() local cFileName = _SourceFolder.."\\AutoPlay\\Docs\\members.txt"; -- путь к файлу CSV local cSeparator = "\t"; -- символ разделитель local tRows = TextFile.ReadToTable(cFileName); -- таблица строк из файла CSV local tDataArray = {}; -- массив данных (по умолчанию) if (tRows) then -- если таблица строк не пустая for n, cString in tRows do -- в цикле перебираем строки таблицы if (String.TrimLeft(cString, nil) ~= "") then -- если строка не пустая local nSeparatorPos = 1; -- позиция разделителя в строке (по умолчанию) local nRow = n - 1; -- номер строки local nCol = 1; -- номер колонки (по умолчанию) tCols = {}; -- таблица колонок строки while (nSeparatorPos ~= -1) do -- в цикле получаем данные для колонок строки nSeparatorPos = String.Find(cString, cSeparator, 1, false); -- позиция разделителя в строке if (nSeparatorPos ~= -1) then -- если есть разделитель в строке cValue = String.Left(cString, nSeparatorPos - 1);-- значение для колонки строки tCols[nCol] = cValue; -- сохраняем значение в таблицу колонок cString = String.Replace(cString, cValue..cSeparator, "", false); -- вырезаем из строки сохраненное значение и разделитель nCol = nCol + 1; -- наращиваем номер колонки elseif (nSeparatorPos == -1 and String.TrimLeft(cString, nil) ~= "") then -- если строка не завершается разделителем tCols[nCol] = cString; -- добавляем значение в таблицу колонок end end end if (Table.Count(tCols) ~= 0) then tDataArray[n] = tCols; -- заполняем массив данных end end end if (Table.Count(tDataArray) ~= 0) then -- если массив с данными не пустой return tDataArray; -- возвращаем массив сданными else -- если массив с данными пустой return nil -- возвращаем nil end end | Всё работает, но есть пару глюков... Самый главный, при одинаковых данных в двух рядом стоящих ячейках, одна из них вырезается... И попроще: если файл начинается с пустой строки, вылетает с ошибкой... если заканчивается пустой строкой, заполняет массив последней строчкой дважды... Вот самый главный глюк не могу победить... Какие будут мнения?
| Всего записей: 903 | Зарегистр. 17-10-2001 | Отправлено: 17:30 20-09-2007 | Исправлено: GOOSE, 17:35 20-09-2007 |
|