Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Загрузка данных из *.csv в ТаблицуЗначений          
Salex Подменю пользователя
сообщение 24.02.11, 1:51
Сообщение #1

Говорящий
Иконка группы
Группа: Местный
Сообщений: 66
Из: Харьков
Спасибо сказали: 113 раз
Рейтинг: 0

Добрый день!
Сталкивался ли кто-нибудь с задачей загрузки данных (файл.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 Подменю пользователя
сообщение 24.02.11, 7:57
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Есть строка, вида: "Один;Два;Три"

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

// ТекСтрока - полученная строка
        
Один = Лев(ТекСтрока, Найти(ТекСтрока, ";")-1);
ТекСтрока = Прав(ТекСтрока, СтрДлина(ТекСтрока) - Найти(ТекСтрока, ";"));
        
Два = Лев(ТекСтрока, Найти(ТекСтрока, ";")-1);
ТекСтрока = Прав(ТекСтрока, СтрДлина(ТекСтрока) - Найти(ТекСтрока, ";"));
        
Три = ТекСтрока;

Спасибо сказали: Salex,

zetovich Подменю пользователя
сообщение 24.02.11, 8:15
Сообщение #3

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 718
Из: Северодонецк
Спасибо сказали: 121 раз
Рейтинг: 0

взято с типовой
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
    
    МассивСтрок = Новый Массив();
    Если Разделитель = " " Тогда
        Стр = СокрЛП(Стр);
        Пока Истина Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = СокрЛ(Сред(Стр,Поз));
        КонецЦикла;
    Иначе
        ДлинаРазделителя = СтрДлина(Разделитель);
        Пока Истина Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = Сред(Стр,Поз+ДлинаРазделителя);
        КонецЦикла;
    КонецЕсли;
    
КонецФункции // глРазложить

Спасибо сказали: Salex, Vofka,

Salex Подменю пользователя
сообщение 24.02.11, 12:53
Сообщение #4

Говорящий
Иконка группы
Группа: Местный
Сообщений: 66
Из: Харьков
Спасибо сказали: 113 раз
Рейтинг: 0

Большое СПАСИБО!
Логика понятна:
1. Читаем слева до разделителя
2. Урезаем строку слева (на количество прочитанных символов). Для этого используем либо функцию Прав (читает символы справа) либо функцию Сред (читает N символов от указанной позиции. Т.к. параметр "количество символов не задан" - читает сроку от указанного символа и до конца.)

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 01.05.24, 1:15
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!