Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Загрузка данных из *.csv в ТаблицуЗначений
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
Salex
Добрый день!
Сталкивался ли кто-нибудь с задачей загрузки данных (файл.csv) в таблицу значений? (числовые значения)
Прошу посоветовать как это грамотно сделать (платформа 1С81)

Я так понимаю работать надо с текстовым файлом. Что-то типа такого:
       
                Попытка                                                  //Пытаемся прочитать файл
            Текст = Новый ЧтениеТекста("d:\win.txt", КодировкаТекста.UTF8);
        Исключение
            Предупреждение("Не удалось прочитать файл");
            Возврат;
        КонецПопытки;
        
        ТабЗн=Новый ТаблицаЗначений;               //Создаем таблицу значений
        
        Стр = Текст.ПрочитатьСтроку();                //Читаем строку из файла
        
        Для Счетчик=0 По СтрЧислоВхождений(Стр,";") Цикл
            ТабЗн.Колонки.Добавить(("Кол"+Счетчик),,("Кол"+Счетчик),20);  //Создаем колонки. Их число на 1 больше чем число разделителей (";")
        КонецЦикла;
        
        Пока Стр <> Неопределено Цикл
            //Здесь нужно как-то разбить строку и записать числа в таблицу значений
                //Как это сделать????
                      
                        Стр = Текст.ПрочитатьСтроку();//переход на новую строку
        КонецЦикла;


Текстовый файл имеет вид:
1,5;4,45;67,8
2,8;6,83;49,1
43,7;5,451;38,5

Подскажите как разбить строку на отдельные данные по разделителю
или может вообще есть какой-то более простой путь???
Vofka
Есть строка, вида: "Один;Два;Три"

Если не заморачиваться с универсальностью:

// ТекСтрока - полученная строка
        
Один = Лев(ТекСтрока, Найти(ТекСтрока, ";")-1);
ТекСтрока = Прав(ТекСтрока, СтрДлина(ТекСтрока) - Найти(ТекСтрока, ";"));
        
Два = Лев(ТекСтрока, Найти(ТекСтрока, ";")-1);
ТекСтрока = Прав(ТекСтрока, СтрДлина(ТекСтрока) - Найти(ТекСтрока, ";"));
        
Три = ТекСтрока;
zetovich
взято с типовой
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
    
    МассивСтрок = Новый Массив();
    Если Разделитель = " " Тогда
        Стр = СокрЛП(Стр);
        Пока Истина Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = СокрЛ(Сред(Стр,Поз));
        КонецЦикла;
    Иначе
        ДлинаРазделителя = СтрДлина(Разделитель);
        Пока Истина Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = Сред(Стр,Поз+ДлинаРазделителя);
        КонецЦикла;
    КонецЕсли;
    
КонецФункции // глРазложить
Salex
Большое СПАСИБО!
Логика понятна:
1. Читаем слева до разделителя
2. Урезаем строку слева (на количество прочитанных символов). Для этого используем либо функцию Прав (читает символы справа) либо функцию Сред (читает N символов от указанной позиции. Т.к. параметр "количество символов не задан" - читает сроку от указанного символа и до конца.)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.