Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 28.08.2017
Сообщений: 70

Запись в массив с проверкой

28.08.2017, 13:56. Показов 2986. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, не могу понять как записать в массив каждую из строк текстового файла с остановкой записи в случае и ее возобновлении на заданной точке в случае возникновения какой-либо ошибки, текстовый файл имеет структуру

1 10.11.12 4000
2 20.07.14 5000
3 14.05.10 8000
4 05.06.09 3000

разделить пробел, при этом необходимо предать элемент массива , а массивом должна выступать каждая строка в стороннюю программу.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.08.2017, 13:56
Ответы с готовыми решениями:

Одномерный массив с проверкой try-catch
Добрый день. Недавно началось обучение C#. Дали задание: "Задан одномерный массив. Сколько раз встречается пара элементов, в которой один...

Запись в сессию с проверкой в обработчике
может вопрос и глуповат, но, вот есть сгенерированная комбинация чисел - мы должны её записать в сессию, подтвердить ввод в поле input, а в...

Вставить запись с проверкой по имеющимся значениям в столбце
Всех приветствую! Мужики, помогите пожалуйста решить задачу. Есть вот такой код: $stmt = $conn->prepare("INSERT INTO...

22
 Аватар для Kloshar
56 / 43 / 27
Регистрация: 19.12.2013
Сообщений: 204
29.08.2017, 17:38
Могу предложить такой вариант:
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
FileStream fs = null;
            string str;
            string[] ar = new string[0];
 
            try
            {
                fs = new FileStream("test.txt", FileMode.Open);
            }            
            catch (IOException ex)
            {
                Console.WriteLine(ex.Message);
            }
 
            StreamReader sr = new StreamReader(fs);
 
            try
            {
                while((str = sr.ReadLine()) != null)
                {
                    Array.Resize(ref ar, ar.Length + 1);
                    ar[ar.Length - 1] = str;
                }
            }
            catch(IOException ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                sr.Close();
            }
 
            foreach(string s in ar)
            {
                Console.WriteLine(s);
            }
 
            Console.ReadKey();
Программа читает файл "test.txt" в папке с exe. Записывает каждую строку в массив и выводит на консоль.
Насчёт возобновления после ошибки непонятно. Какая именно ошибка? Это важно.
1
0 / 0 / 0
Регистрация: 28.08.2017
Сообщений: 70
06.09.2017, 12:34  [ТС]
Ошибка связанная с перезагрузкой Windows. Т.е. во время выполнения записи в массив каждой из строк предположим перезагружается Windows, каким образом будет реализован механизм последующего считывания строк из текстового файла* на мой взгляд должен создаваться промежуточный тестовый файл в котором бы запоминалась последняя строка с которой надо начинать читать все остальные строки (строк при этом неизвестно сколько)
0
Unnamed
 Аватар для kingzfate
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
06.09.2017, 12:42
Asew, при перезагрузке компьютера, в любом случае надо будет заного заносить текст в массив. Сделать это можно, но ведь вам нужно будет и предыдущая часть массива? А смысл тогда что-то запоминать
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
06.09.2017, 12:44
Цитата Сообщение от Kloshar Посмотреть сообщение
Могу предложить такой вариант:
зачем менять размерность массива самому для этого есть списки))
0
0 / 0 / 0
Регистрация: 28.08.2017
Сообщений: 70
06.09.2017, 12:51  [ТС]
Цитата Сообщение от Kloshar Посмотреть сообщение
Могу предложить такой вариант:
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
FileStream fs = null;
            string str;
            string[] ar = new string[0];
 
            try
            {
                fs = new FileStream("test.txt", FileMode.Open);
            }            
            catch (IOException ex)
            {
                Console.WriteLine(ex.Message);
            }
 
            StreamReader sr = new StreamReader(fs);
 
            try
            {
                while((str = sr.ReadLine()) != null)
                {
                    Array.Resize(ref ar, ar.Length + 1);
                    ar[ar.Length - 1] = str;
                }
            }
            catch(IOException ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                sr.Close();
            }
 
            foreach(string s in ar)
            {
                Console.WriteLine(s);
            }
 
            Console.ReadKey();
Программа читает файл "test.txt" в папке с exe. Записывает каждую строку в массив и выводит на консоль.
Насчёт возобновления после ошибки непонятно. Какая именно ошибка? Это важно.
1. Создается массив из строк
2. Строка разбивается на элементы (3 элемента), количество строк неизвестно
3. Каждый элемент передается в другую программу
4. Винда внезапно перезагрузилась. К этому моменту передалось допустим 5 тыс строк , 50 тыс не передалось
5. Комп включился и программа должна запуститься автоматически, при этом должно продолжится считывание строки 5001 , а не 5000-ой
6. Возможно 5001 первая строка какая-то некорректная, предположим в ней не 3 элемента в строке, а каким-то раком 2 . программа должна это учесть, пропустить эту строку и продолжить запись с 5002. При этом записав файл эту строку косячную, ну чтоб как-то отследить ее из этой массы строк.

Добавлено через 2 минуты
Цитата Сообщение от kingzfate Посмотреть сообщение
Asew, при перезагрузке компьютера, в любом случае надо будет заного заносить текст в массив. Сделать это можно, но ведь вам нужно будет и предыдущая часть массива? А смысл тогда что-то запоминать
ответил,см.предыдущий пост)
0
Unnamed
 Аватар для kingzfate
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
06.09.2017, 13:09
Asew, ну просто записывайте в отдельный файл число строки и все, и в следующий раз, сначала проверяете есть ли этот файл, если есть, начинаете считывать с этой строки в файле.
0
0 / 0 / 0
Регистрация: 28.08.2017
Сообщений: 70
06.09.2017, 13:23  [ТС]
Цитата Сообщение от kingzfate Посмотреть сообщение
Asew, ну просто записывайте в отдельный файл число строки и все, и в следующий раз, сначала проверяете есть ли этот файл, если есть, начинаете считывать с этой строки в файле.
ваша мысль не ясна
0
Unnamed
 Аватар для kingzfate
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
06.09.2017, 13:27
Asew,
1) идет запись в массив
2) перезагрузился комп
3) программа включилась, проверила есть ли файл со значением последней считываемой строки
4) если есть, начинаем считывать со следующей строки
5) если нет считываем сначала
0
0 / 0 / 0
Регистрация: 28.08.2017
Сообщений: 70
06.09.2017, 13:30  [ТС]
Цитата Сообщение от kingzfate Посмотреть сообщение
Asew,
1) идет запись в массив
2) перезагрузился комп
3) программа включилась, проверила есть ли файл со значением последней считываемой строки
4) если есть, начинаем считывать со следующей строки
5) если нет считываем сначала
я это фактически и написал в своем посте, только не учел индекс строки ...программно вот вопрос как это оформить, сижу ломаю голову.
0
Unnamed
 Аватар для kingzfate
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
06.09.2017, 13:36
Asew, т.е. ты предлагаешь за тебя всю программу написать?
Всю логику уже расписали
0
0 / 0 / 0
Регистрация: 28.08.2017
Сообщений: 70
06.09.2017, 13:40  [ТС]
Цитата Сообщение от kingzfate Посмотреть сообщение
Asew, т.е. ты предлагаешь за тебя всю программу написать?
дать пример конкретно если это возможно не создания массива из строк, а часть где идет считывание из нужной строки при перезагрузке...выдранный кусок кода..зачем мне вся программа
0
Unnamed
 Аватар для kingzfate
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
06.09.2017, 14:14
Asew, если слишком большой объем файла лучше бы было его разбивать на отдельные и определять и записывать по очереди
0
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
06.09.2017, 14:34
Asew, лучше объясни что за программа и что она делает , ибо писать в фаил каждую долю секунды № строки это изврат
0
 Аватар для Kloshar
56 / 43 / 27
Регистрация: 19.12.2013
Сообщений: 204
06.09.2017, 14:59
Можно записывать после считывания каждой строки её номер в отдельный файлик. Я создал в файл counter.txt, в нем изначально записано число 0. После чтения строки из файла test.txt открывается counter.txt и в него записывается новый номер. Так, если все строки считаны, то запишется номер последней строки.
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
75
76
77
78
static void ReadStringFromFile()
        {
            FileStream fs = null;
            FileStream fsCounter = null;
            StreamWriter swCounter = null;
            string str;
            string[] ar = new string[0];
            int count;
 
            try
            {
                fs = new FileStream("test.txt", FileMode.Open);
                fsCounter = new FileStream("count.txt", FileMode.Open);
            }
            catch (IOException ex)
            {
                Console.WriteLine(ex.Message);
            }
 
            //Проверим, было ли что-то передано ранее, если да, то count=x
            StreamReader srCouner = new StreamReader(fsCounter);
 
            try
            {
                count = int.Parse(srCouner.ReadLine());                
            }
            catch (IOException ex)
            {
                Console.WriteLine(ex.Message);
                count = 0;
            }
            finally
            {
                srCouner.Close();
            }
            
 
            StreamReader sr = new StreamReader(fs);
 
            try
            {
                //Если было передано, то пропускаем это количество строк
                if(count > 0)
                {
                    for (int i = 0; i < count; i++)
                    {
                        str = sr.ReadLine();
                    }
                }
 
                while ((str = sr.ReadLine()) != null)
                {
                    //теперь откроем файл счётчика для записи
                    swCounter = new StreamWriter("count.txt", false);
                    Array.Resize(ref ar, ar.Length + 1);
                    ar[ar.Length - 1] = str;
                    count += 1;
                    swCounter.Write(count.ToString());
                    swCounter.Close();
                }
            }
            catch (IOException ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                sr.Close();
                swCounter.Close();
            }
 
            foreach (string s in ar)
            {
                Console.WriteLine(s);
            }
 
            Console.ReadKey();
        }
0
0 / 0 / 0
Регистрация: 28.08.2017
Сообщений: 70
06.09.2017, 15:52  [ТС]
Добавлено через 7 минут
Значение не может быть неопределенным. Если прописать в count число какое-то ошибок не возникает, прописав ноль и после прочтения строк номер не меняется , как был ноль так и остался
0
Unnamed
 Аватар для kingzfate
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
06.09.2017, 15:59
Там надо на каждой итерации записывать, тогда будет гут
0
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
06.09.2017, 16:02
Цитата Сообщение от Kloshar Посмотреть сообщение
Можно записывать после считывания каждой строки её номер в отдельный файлик. Я создал в файл counter.txt, в нем изначально записано число 0. После чтения строки из файла test.txt открывается counter.txt и в него записывается новый номер. Так, если все строки считаны, то запишется номер последней строки.
И от чего это спасет?

Если рубанут электричество во время записи то не поможет , а сделает только хуже твой фаил на обычном винте превратиться в мусор а то и все файлы...

Когда пользователь завершает работу Win - это можно узнать через API: WM_QUERYENDSESSION
0
 Аватар для Kloshar
56 / 43 / 27
Регистрация: 19.12.2013
Сообщений: 204
06.09.2017, 16:12
Цитата Сообщение от Asew Посмотреть сообщение
Значение не может быть неопределенным. Если прописать в count число какое-то ошибок не возникает, прописав ноль и после прочтения строк номер не меняется , как был ноль так и остался
У меня консольное приложение в методе Main() я вызываю метод ReadStringFromFile(); он статический, может это важно. Попробовал сделать файлик test.txt на тысячу строк, нормально проходит. Если в файле count.txt записать, например, 992, то на консоль выводит последние 8 строк.
0
0 / 0 / 0
Регистрация: 28.08.2017
Сообщений: 70
06.09.2017, 16:32  [ТС]
Цитата Сообщение от Kloshar Посмотреть сообщение
У меня консольное приложение в методе Main() я вызываю метод ReadStringFromFile(); он статический, может это важно. Попробовал сделать файлик test.txt на тысячу строк, нормально проходит. Если в файле count.txt записать, например, 992, то на консоль выводит последние 8 строк.
у меня тоже так работает..только если записать в файле ноль, а потом запустить программу, то в файле автоматом не окажется 1000 строк

Добавлено через 6 минут
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
 
namespace ConsoleApp3
{
    class Program
    {
        public static void Main()
        {
            FileStream fs = null;
            FileStream fsCounter = null;
            StreamWriter swCounter = null;
            string str;
            string[] ar = new string[0];
            int count;
            try
            {
                fs = new FileStream("E:test.txt", FileMode.Open);
                fsCounter = new FileStream("E:count.txt", FileMode.Open);
            }
                catch (IOException ex)
            {
                Console.WriteLine(ex.Message);
            }
 
            //Проверим, было ли что-то передано ранее, если да, то count=x
            StreamReader srCouner = new StreamReader(fsCounter);
 
             try
            {
                count = int.Parse(srCouner.ReadLine());
            }
                catch (IOException ex)
            {
                Console.WriteLine(ex.Message);
                count = 0;
            }
                finally
            {
                srCouner.Close();
            }
 
 
    StreamReader sr = new StreamReader(fs);
 
    try
    {
        //Если было передано, то пропускаем это количество строк
        if (count > 0)
        {
            for (int i = 0; i < count; i++)
            {
                str = sr.ReadLine();
            }
        }
 
        while ((str = sr.ReadLine()) != null)
        {
            //теперь откроем файл счётчика для записи
            swCounter = new StreamWriter("count.txt", false);
            Array.Resize(ref ar, ar.Length + 1);
            ar[ar.Length - 1] = str;
            count += 1;
            swCounter.Write(count.ToString());
            swCounter.Close();
        }
    }
    catch (IOException ex)
    {
        Console.WriteLine(ex.Message);
    }
    finally
    {
        sr.Close();
        swCounter.Close();
    }
 
    foreach (string s in ar)
    {
        Console.WriteLine(s);
    }
 
    Console.ReadKey();
}
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.09.2017, 16:32
Помогаю со студенческими работами здесь

Циклическая запись с проверкой на наличие в таблицу MySql
Не получается записать в цикле значения. Есть список по которому проходит цикл foreach в нем делаю для каждого значения проверку,...

Двумерный массив с проверкой условий
1)Нужно задать одномерный массив и заполнить его значениями. Размер массива 168 значений. 2)Проверить эти значения на условие. Среднее...

Одномерный массив с проверкой элементов на повтор
Доброе время суток, сегодня первый день изучаю язык Си...дали задание: Сгенерировать одномерный массив (размер 5 или 6, который задаёт...

Ввод с клавиатуры и запись в файл, чтение из файла и запись в массив, вывод из массива на экран
1.Ввод с клавиатуры и запись в файл, чтение из файла и запись в массив, вывод из массива на экран 2.Ввод с клавиатуры и запись в массив,...

Запись строки в массив, сортировка, удаление и запись в файл
Нужна помощь. Из edit box к нам приходят строки мы их фильтруем. нужно строки записать в массив, отсортировать по последним двум...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru