Имя: Пароль:
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 лет иммитации работы" не научился отличать ТекстовыйДокумент от ЧтениеТекста. Чего уж тут говорить...
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан