Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
izy125
24 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 34
1

Построчное чтение из файла до нужной строки

25.06.2012, 21:11. Просмотров 2131. Ответов 5
Метки нет (Все метки)

Доброго времени суток.
И снова война с текстовым файлом.
Суть куска программы: построчное чтение из файла до нужной строки. Присваивание строковому массиву элементов, которые получены при разделение считанной строки.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
StreamReader f_SKG = File.OpenText(@"SKG.txt");
private void Work(int str_elm,int nom)
{
   string line_SKG;
   string[] skg = new string[4];
   f_SKG.BaseStream.Seek(0, SeekOrigin.Begin);
   for (int i = 0; i < skg.Length; i++)
                skg[i] = "";
   for (int i = 0; i <= nom; i++)
                {
                    line_SKG = "";
                    line_SKG = f_SKG.ReadLine();
                    skg = line_SKG.Split(new char[] { '\t' });
                }
}
Ошибка вылезает в line_SKG = f_SKG.ReadLine() , причем не всегда, иногда лишь на 5-6 чтении файла. Она заключается в том, что к элементу строки файла(каждая строка в нем - набор коэффициентов) добавляется левое число.

Собственно, как и откуда может вылезать этот добавочный "хвостик"?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2012, 21:11
Ответы с готовыми решениями:

Построчное чтение из файла. Разделение каждой строки на ФИО, ID и статус
public void getDATA(int PIN)//получить даннные из базы { ...

Построчное чтение файла в консоли - выводятся две строки подряд
Есть текстовый файл, в нём куча строчек. Читаю файл: foreach (string lr in File.ReadLines(path,...

построчное чтение файла
Доброе утро! Мне требуется помощь в следующем у меня есть файл, примерно следующего вида: Имя...

Построчное чтение файла
Здравствуйте. У меня возникла проблема с построчным чтением файла. На форуме так и не нашёл. Суть...

Построчное чтение текстового файла
Уважаемые господа, возник вопрос, так как я начинающий прошу сильно не пинать. Необходимо...

5
turbanoff
Эксперт Java
4026 / 3761 / 743
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
26.06.2012, 07:11 2
Непонятно, в чем проблема - нужен пример файла.
Код вроде правильный. Только форматируйте его, пожалуйста, перед тем как выкладывать на форум.
0
+B
Заблокирован
26.06.2012, 07:33 3
C#
1
2
3
            int нужная_длинна = 5;             
            string[] readText = System.IO.File.ReadAllLines(file_name);
            Array.Resize(ref readText, нужная_длинна);
Цитата Сообщение от izy125 Посмотреть сообщение
Собственно, как и откуда может вылезать этот добавочный хвостик?
Используй в качестве разделителя Environment.NewLine.
C#
1
line_SKG.Split(new string[] { Environment.NewLine });
Добавлено через 4 минуты
Вернее вот так
C#
1
ine_SKG.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
0
turbanoff
Эксперт Java
4026 / 3761 / 743
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
26.06.2012, 07:39 4
Цитата Сообщение от +B Посмотреть сообщение
Используй в качестве разделителя Environment.NewLine.
Он уже отдельную строку делит, с помощью Split. Прочитайте код внимательней.
StreamReader.ReadLine() и так знает какой должен быть конец строки.
0
+B
Заблокирован
26.06.2012, 07:54 5
Цитата Сообщение от turbanoff Посмотреть сообщение
Прочитайте код внимательней.
Пускай выкладывает проект и файл который необходимо прочитать. А так это пальцем в небо.
0
izy125
24 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 34
26.06.2012, 17:16  [ТС] 6
Доброго утра
Полностью проект и файлы с которыми работаю лежат тут:
project.zip

Тут полностью процедура в которой вылезает ошибка:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
       private void Work(int str_elm,int nom)
        {
            string line_TAU, line_SKG, line_SNC, line_por_E;
            string[] snc = new string[2];
            string[] skg = new string[4];
            string[] tau = new string[29];
            string[] por_e = new string[4];
            double angl;
 
            if (angle.Enabled == false)
                 preg = (double)thickness.Value - U / 10;
            else
              {
                 angl = (double)angle.Value * 3.14 / 180;
                 preg = Math.Sin(angl) * U / 10;
              }
 
            //переносим указатель в начало файла
            f_por_E.BaseStream.Seek(0, SeekOrigin.Begin);
            f_SKG.BaseStream.Seek(0, SeekOrigin.Begin);
            f_SNC.BaseStream.Seek(0, SeekOrigin.Begin);
            f_TAU.BaseStream.Seek(0, SeekOrigin.Begin);
 
            //обнуление промежуточных массивов 
            for (int i = 0; i < snc.Length; i++)
                snc[i] = "";
            for (int i = 0; i < skg.Length; i++)
                skg[i] = "";
            for (int i = 0; i < tau.Length; i++)
                tau[i] = "";
            for (int i = 0; i < por_e.Length; i++)
                por_e[i] = "";
 
            //формируем массивы со требуемыми коэффициентами и пороговыми значениями Е
            for (int i = 0; i <= nom; i++)
                {
                    line_TAU = "";
                    line_TAU = f_TAU.ReadLine();
                    tau = line_TAU.Split(new char[] { '\t' });
 
                    line_SNC = "";
                    line_SNC = f_SNC.ReadLine();
                    snc = line_SNC.Split(new char[] { '\t' });
 
                    line_SKG = "";
                    line_SKG = f_SKG.ReadLine();
                    skg = line_SKG.Split(new char[] { '\t' });
 
                    line_por_E = "";
                    line_por_E = f_por_E.ReadLine();
                    por_e = line_por_E.Split(new char[] { '\t' });
                }
 
           //переводит значения коэффициентов из строковых в цифровые
            for (int i = 0; i < tau.Length; i++)
              {
                 TAU[str_elm, i] = double.Parse(tau[i]);
              }
 
            for (int i = 0; i < snc.Length; i++)
            {
                SNC[str_elm, i] = double.Parse(snc[i]);
            }
 
            for (int i = 0; i < skg.Length-1; i++)
              {
                 SKG[str_elm, i] = double.Parse(skg[i]);
              }
 
            for (int i = 1; i < por_e.Length-1; i++)
              {
                 por_E[str_elm, i] = double.Parse(por_e[i]);
              }
        }
Ошибка вылетает только при работе с файлами TAU, SKG и SNC.

Добавлено через 8 часов 30 минут
После долгих медитаций кажется удалось зацепить за ошибку.
Текстовые файлы читаю построчно до определенного момента и снова к ним обращаюсь при начале следующего расчета. Дабы читать файлы с начало, пользуюсь командой:
C#
1
f_TAU.BaseStream.Seek(0, SeekOrigin.Begin);
Метод тыка показал, что указатель не возвращается в начало.

Добавлено через 35 минут
ошибка как всегда оказалась глупой и простой:
C#
1
2
3
4
5
6
7
8
9
10
11
//переносим указатель в начало файла 
f_por_E.BaseStream.Seek(0, SeekOrigin.Begin);
f_SKG.BaseStream.Seek(0, SeekOrigin.Begin);
f_SNC.BaseStream.Seek(0, SeekOrigin.Begin);
f_TAU.BaseStream.Seek(0, SeekOrigin.Begin);
 
//отчищаем буфер
f_por_E.DiscardBufferedData();
f_SKG.DiscardBufferedData();
f_SNC.DiscardBufferedData();
f_TAU.DiscardBufferedData();
Буфер как обычно был забыт
0
26.06.2012, 17:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2012, 17:16

Чтение построчное из текстового файла в массив
Нужно считать данные из текстового файла в массив. Вроде, как всё считывает, но перезаписывает...

Построчное чтение txt файла с разделителями
Здравствуйте есть некий файл в котором находятся строки c разделителем (:) задача заключается в...

Построчное чтение из текстового файла и вывод
Такой вопрос: у меня есть txt на раб столе в нем есть построчно написанные буквы a b c. Через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru