Имя: Пароль:
1C
1С v8
Чтение из текстового файла
0 Kaukass
 
11.03.15
12:40
Изучаю работу с файлами.
Нашел пример, на его основе сделал скелет будущей процедуры, а она как то странно работает - ничего не сообщает. Поставил точку останова в цикле, а до цикла то и не доходит.
1 Kaukass
 
11.03.15
12:40
Процедура КнопкаВыполнитьНажатие(Кнопка)
    // Вставить содержимое обработчика.
    ПоработатьСФайлом();
КонецПроцедуры
Процедура ПоработатьСФайлом()
         Перем Стр;
                //Открываем диалог выбора файла для чтения
        ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
        ВыборФайла.МножественныйВыбор = Ложь;
        ВыборФайла.Заголовок = НСтр("ru = 'Выбор файла'");
        ВыборФайла.Фильтр = НСтр("ru = 'Все файлы (*.*)|*.*'");
        
        
        Если ВыборФайла.Выбрать() Тогда                
             ПолноеИмяФайла = ВыборФайла.ПолноеИмяФайла;
        
         КонецЕсли;
        Текст = Новый ЧтениеТекста;
        Текст.Открыть(ПолноеИмяФайла);
        о = 1;
        Пока Стр <> Неопределено Цикл // строки читаются до символа перевода строки
                Стр = Текст.ПрочитатьСтроку();
                Сообщить(Стр);
                о =  о +1;
                Если Стр =  Неопределено тогда Сообщить("Неопределено");
                Иначе     Сообщить(Стр);
                КонецЕсли;
        КонецЦикла;

        Текст.Закрыть();

    КонецПроцедуры
2 kortun
 
11.03.15
12:40
телепаты на отдыхе, давай код
3 polosov
 
11.03.15
12:41
А до цикла у тебя Стр = неопределено.
4 kortun
 
11.03.15
12:42
попробуй так
    ТекстовыйДокумент = Новый ТекстовыйДокумент;
    ТекстовыйДокумент.Прочитать("d:\sootp.csv");
    
    Соответствие = Новый Соответствие;
    ВсегоСтрок = ТекстовыйДокумент.КоличествоСтрок();
    
    Для НомерСтроки = 2 По ВсегоСтрок Цикл
        
        МассивПолей = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки), ";");
        
         Соответствие.Вставить(СокрЛП(МассивПолей[0]), СокрЛП(МассивПолей[1]));
        
    КонецЦикла;
5 mistеr
 
11.03.15
12:42
(0) Условие цикла неверное, вот и не доходит. В СП есть пример цикла по файлу.
6 Kaukass
 
11.03.15
12:44
Благодарю
7 Kaukass
 
11.03.15
12:44
Ща попробую
8 Kaukass
 
11.03.15
12:47
Это , наверное, такой пример - с двойным дном. Пока "взлетит", обучающийся  еще много чему поучится :)
9 Kaukass
 
11.03.15
12:53
Инициировал переменную перед началом цикла

стр = Текст.ПрочитатьСтроку();

и тогда начался перебор файла.
10 kortun
 
11.03.15
13:20
(8) с каким двойным дном? заменить путь к файлу и выдрать кусок текста ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки) для получения строки - это уже сложно считается? О_о
11 kortun
 
11.03.15
13:20
+(10) а, еще удалить строку про соответствие
12 Kaukass
 
11.03.15
13:29
(10) - я имел в виду пример, который нашел на левом сайте. Там, где стр была неопределена до начала цикла. С твоим все пучком - спасибо.
13 kortun
 
11.03.15
13:33
(12) а, понятно, там вообще какой-то левый пример.
14 Torquader
 
11.03.15
14:00
Вообще-то, лучше сразу учиться читать построчно, чтобы потом не смотреть с грустным видом на сообщение "Нехватка памяти".
15 kortun
 
11.03.15
14:02
(14) ну это редкие случае совсем, я за 15 лет работы с таким не разу не пересекался.
16 Torquader
 
11.03.15
14:04
(15) Ну, файл на три гига очень маловероятно, что влезет в память целиком, а это - далеко не предел.
17 Torquader
 
11.03.15
14:06
Просто, в связи с переходом на клиент-сервер жрать память на сервере под весь файл как-то неразумно, особенно, если мы потом его читаем построчно (и не возвращаемся от конца к началу).
18 D_E_S_131
 
11.03.15
14:37
(17) kortun за свои "15 лет иммитации работы" не научился отличать ТекстовыйДокумент от ЧтениеТекста. Чего уж тут говорить...