Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.96/23: Рейтинг темы: голосов - 23, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 32
1

как записать данные в файл txt

24.04.2013, 22:32. Просмотров 4500. Ответов 27
Метки нет (Все метки)

У меня есть текстовый файл, в нем 5 полей
к примеру |1|август|2013|22 сентября 2012|3 октября 2014|
на форме нужно считать с dataPicker1 дату и записать ее на место 22 сентября 2012
с dataPicker2 дату и записать ее на место 3 октября 2014


Как здесь запись именно на место 4 и 5 поля? |||должны сохраниться, в них просто будет пусто


C#
1
2
3
StreamWriter writer = new StreamWriter("inputtt.txt", true);
string l = dateTimePicker1.Text;
 string m = dateTimePicker2.Text;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2013, 22:32
Ответы с готовыми решениями:

Файл: Как с помощью Python записать (а не перезаписать) данные из базы SQLite в файл lex.txt.
Помогите с разработкой части проекта, пожалуйста! Есть файл db.sqlite в котором таджикские слова:...

Как записать данные из формы в .txt файл не используя FileSystemObject?
Желательно через DSN ..

Записать 200 случайных чисел в файл a.txt. В файл b.txt вывести четные, а в файл c.txt нечетные
Записать 200 случайных чисел в файл a.txt. В файл b.txt вывести четные, а в файл c.txt нечетные.

Записать данные в .txt файл
помогите пожалуйста записать строки с пометкой "//это" записать в 1.txt файл uses CRT; Const...

27
53 / 53 / 5
Регистрация: 06.04.2013
Сообщений: 178
24.04.2013, 22:38 2
если я правильно понял то:
читаем весь файл в массив, и в нужной строке идем по маркерам "|" на нужную позицию (т е находим позицию 4, 5, 6 вхождения, удаляем (вхождение4-вхождение5-1), вставляем на место вхождения4 нужную строку, аналогично дальше), вносим изменения.
сохраняем массив в тот же файл (перезаписываем файл вообщем).

вот тут гляньте:
[ Удаление строки из файла ]
0
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 32
24.04.2013, 22:43  [ТС] 3
да, иду по тексту

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
StreamReader reader = new StreamReader("input.txt", Encoding.GetEncoding(1251));
            string text = reader.ReadToEnd();
            string[] parts = text.Split('|');
            Str[] aa = new Str[parts.Length / 5];
            int v = 0;
            for (int n = 0; n < parts.Length - 1; n += 5)
            {
                aa[v] = new Str(parts[n], parts[n + 1], parts[n + 2], parts[n + 3], parts[n + 4]);
                v++;
            }
            for (int cc = 0; cc < aa.Length; cc++)
            {
                StreamWriter writeer = new StreamWriter("input.txt", true);
 
                string data1 = dateTimePicker1.Text;
                string data2 = dateTimePicker2.Text;
 
                writeer.WriteLine("{}");
т е в parts[n + 3], parts[n + 4] нужно записать значение, вопрос как?
0
53 / 53 / 5
Регистрация: 06.04.2013
Сообщений: 178
25.04.2013, 00:01 4
не силен в C#, но вот у меня так получилось. если я все правильно понял:

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
StreamReader reader = new StreamReader("d:\\input.txt", Encoding.GetEncoding(1251));
            string text = reader.ReadToEnd();
            reader.Close();
            string[] parts = text.Split('|');
            
            //       string data1 = dateTimePicker1.Text;
            //       string data2 = dateTimePicker2.Text;
 
            // пишем data1
            int nLine = 2; // номер строки (начиная с 1, строки разделенные пробелами, каждая строка имеет 5 записей с фиксированной длинной), в которой нужно сделать изминения
            int nPos = 4; // номер записи (начиная с 1)
            parts[(nLine - 1) * 6 + nPos] = "01 октября 2018 "; // выравниваем на длинну записи
            
            // пишем data2
            nLine = 3; // номер строки, в которой нужно сделать изминения
            nPos = 5; // номер записи
            parts[(nLine-1) * 6 + nPos] = "31 ноября 2028"; // умножить на 6 т. к. ентер воспринимается как элемент массива parts
            
            string z="";
            // parts[0] пропускаем
            // сводим все вместе + разделитель
            for (int i = 1; i < parts.Length; i++) z +=  "|"+parts[i];
 
            StreamWriter writeer = new StreamWriter("d:\\input.txt", false, Encoding.GetEncoding(1251)); // перезаписываем файл
            writeer.WriteLine(z);
            writeer.Close();
Добавлено через 5 минут
Поправочка:
строчка 25:
C#
1
        writeer.Write(z);
0
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 32
25.04.2013, 16:31  [ТС] 5
к сожалению не работает, файл не перезаписывает-изменения не вносятся(
0
53 / 53 / 5
Регистрация: 06.04.2013
Сообщений: 178
25.04.2013, 16:37 6
у меня все работало. странно.

файл D:\input.txt
|1|август|2013|22 сентября 2012|3 октября 2014|
|2|август|2013|01 октября 2018 |3 октября 2014|
|3|август|2013|22 сентября 2012|31 ноября 2028|
visual C# express

через пол часа еще раз пересмотрю
0
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 32
25.04.2013, 17:04  [ТС] 7
пишет Процесс не может получить доступ к файлу input.txt", так как этот файл используется другим процессом.
oops ,опечатка в первом сообщении перед первым символом|нет
вот так
1|август|2013|22 сентября 2012|3 октября 2014|
2|август|2013|01 октября 2018 |3 октября 2014|
3|август|2013|22 сентября 2012|31 ноября 2028|

Добавлено через 18 минут
а в каком месте кода идет считывани инф-ии, что сегодня 25 апреля 2013 г?которое нужно вставить на место
22 сентября 2012
0
53 / 53 / 5
Регистрация: 06.04.2013
Сообщений: 178
25.04.2013, 17:38 8
т е формат должен быть такой?
в начале строки не нужен символ "|"?

1|август|2013|22 сентября 2012|3 октября 2014|
2|август|2013|01 октября 2018 |3 октября 2014|
3|август|2013|22 сентября 2012|31 ноября 2028|

Split ом разбивается данные в массив, где каждый элемент это поле.
поиск того, что нужно заменить происходит по указанию нужной строки и столбца.
соотв вычисляем смещение (строка, столбец), заменяем, объедением и опять запихиваем в файл. что непонятного?

у меня все работает, посмотри, может у тебя где-то в блокноте открыт этот текстовой файл, хз
сейчас скину проект полностью
0
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 32
25.04.2013, 17:44  [ТС] 9
да-да, перед первым символом |не надо
просто
1|август|2013|22 сентября 2012|3 октября 2014|

ошибки нет, забыла приписать.там др поток был открытый
массив понятен, я имею ввиду где идет считывание не с блокнотовского файла, а dataPicker1 ?
0
53 / 53 / 5
Регистрация: 06.04.2013
Сообщений: 178
25.04.2013, 18:18 10
OMG...
Как где идет считывание с dataTimePicker1? Да где угодно, когда тебе нужно поменять значения, тогда и считываем.
Немного непонятно уже ничерта )

получаем дату:
textBox1.Text=dateTimePicker1.Text;
"25 квітня 2013 р."
это имелось ввиду?

или тебе нужно, скажем найти определенную дату и заменить ее датой из датаТаймПикера?
т е заранее ты не знаешь ее нахождение (строка, столбец)?

----------------------------- обновленный код:
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
StreamReader reader = new StreamReader("input.txt", Encoding.GetEncoding(1251));
            string text = reader.ReadToEnd();
            reader.Close();
            string[] parts = text.Split('|');
 
            //       string data1 = dateTimePicker1.Text;
            //       string data2 = dateTimePicker2.Text;
 
            // пишем data1  в первую строчку, 4 столбец
            int nLine = 1; // номер строки (начиная с 1, строки разделенные пробелами, каждая строка имеет 5 записей с фиксированной длинной), в которой нужно сделать изминения
            int nPos = 4; // номер записи (начиная с 1)
            parts[(nLine - 1) * 5 + nPos-1] = "00 октября 3018 "; // data1; выравниваем на длинну записи
            
            // пишем data2 в первую строку, 5 столбец
            nLine = 1; // номер строки, в которой нужно сделать изминения
            nPos = 5; // номер записи
            parts[(nLine-1) * 5 + nPos-1] = "31 ноября 3028"; // data2
 
            string z="";
            // parts[0] пропускаем
            // сводим все вместе + разделитель
            for (int i = 0; i < parts.Length-1; i++) z +=  parts[i]+"|";
            StreamWriter writeer = new StreamWriter("input.txt", false, Encoding.GetEncoding(1251));
            writeer.Write(z);
            writeer.Close();

-----------------------------
p.s. да, так к слову, если не указать D:\\ то файл input.txt будет в: папке проекта\bin\Debug (где собственно и сам exe.шник).
0
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 32
25.04.2013, 18:54  [ТС] 11
в debug он и находится, поэтому адрес не указываю
textBox1.Text=dateTimePicker1.Text; просо пыталась найти это у вас в коде

найти определенную дату и заменить ее датой из датаТаймПикера,да как раз это и имелось ввиду)
столбец то знаю-4й и 5й(если с нуля отсчет , то соответственно 3 и 4)
строку не знаю, ищу по ...к примеру.там в какой строчке первое значение 3, там изменяю дату
т е в строке 3|август|2013|22 сентября 2012|31 ноября 2028| меняю даты
0
53 / 53 / 5
Регистрация: 06.04.2013
Сообщений: 178
25.04.2013, 19:45 12
короче, я вот понял так:
-- есть 2 датаТаймпикера;
-- есть файл с определенным форматом записей;
-- есть некая строка fnd которую необходимо сначала найти в файле, затем заменить на значение из датаТаймПикер.
-- записать изменения в файл
-- совсем забыл -- длинна каждой записи (между ||) не нужно делать везде одинаковой, без разницы.

вопросы:
-- необходито ставить энтеры в конце каждой строки записи?
т. е. что бы было вот так:

1|август|2013|22 сентября 2012|3 октября 2014|2|август|2013|01 октября 2018 |3 октября 2014|3|август|2013|22 сентября 2012|31 ноября 2028|
или обязательно разделять переводом строки?

-- зачем второй дататаймпикер? (dateTimePicker2)
0
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 32
25.04.2013, 20:17  [ТС] 13
2 дата пикера
файл, с записями
1|август|2013|22 сентября 2012|2 сентября 2012|
3|октябрь|2014|2 августа 2013|5 мая 2005|

делаю, чтобы каждая строка была на отдельной строчке. Enter надо

ну вот смотри, ввожу изменения в строку где первое значение 3 т е в строку 3|октябрь|2014|2 августа 2013|5 мая 2005|

теперь о датапикерах , 1й нужен для того чтобы изменить первую дату-т е в нашем случае 2 августа 2013
2й датапикер соответственно заменяет вторую дату т е собой, вместо 5 мая 2005|

т е если в обоих дата пикера будет выбрано число 25 апреля 2013, то в перезаписанном виде файл будет выглядеть так

1|август|2013|22 сентября 2012|2 сентября 2012|
3|октябрь|2014|25 апреля 2013|25 апреля 2013|

т е нужно считать данные с входящего файла, reader,и открыть для записи writer -вот тут проблема- т к как перезаписать внеся изменения я не знаю((


длина -чихать,мне главное чтобы изменеия вносились)

Добавлено через 7 минут
т е меняем не строку, а только отдельные элементы в ней(3 первых поля 3|октябрь|2014| остаются без изменений )
0
53 / 53 / 5
Регистрация: 06.04.2013
Сообщений: 178
25.04.2013, 20:48 14
такс, вроде понятно, меняет только 4 и 5 записи, остальное неизменно.

процедура меняет в массиве D соответствующие записи по указанному номеру строки nLine и номеру записи.
все начинается с 1.
номер строки не должен выходить за количество, которое уже есть в исходном файле. (т е файл уже должен содержать некое количество строк!)
номер записи аналогично не должен выходить за 5.
C#
1
public void replaceData(string[] D, string d1, int nLine, int nPos)

вот так осн. часть кода, проект прикреплю снизу, что бы уже точно все запускалось

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
private void button1_Click(object sender, EventArgs e)
        {
            string data1 = dateTimePicker1.Text;
            string data2 = dateTimePicker2.Text;
 
            StreamReader reader = new StreamReader("input.txt", Encoding.GetEncoding(1251));
            string text = reader.ReadToEnd();
            reader.Close();
            string[] parts = text.Split('|');
 
             // ВНИМАНИЕ! здесь указываются только строки, которые есть в файле. если в файле 3 строчки, а указываем напр replaceData(parts, data1, 4, 4) -- то конечно ошибка.
            // пишем data1  в первую строчку, 4 столбец
            replaceData(parts, data1, 1, 4);
            // пишем data2 в первую строку, 5 столбец
            replaceData(parts, data2, 1, 5);
          
            string z = "";
            // сводим все вместе + разделитель
            for (int i = 0; i < parts.Length - 1; i++) z += parts[i] + "|";
            StreamWriter writeer = new StreamWriter("input.txt", false, Encoding.GetEncoding(1251));
            writeer.Write(z);
            writeer.Close();
        }
 
        // nLine - номер строки (начиная с 1, строки разделенные пробелами, каждая строка имеет 5 полей)
        // nPos - номер записи для указанной строки (начиная с 1)
        public void replaceData(string[] D, string d1, int nLine, int nPos)
        { D[(nLine - 1) * 5 + nPos - 1] = d1; }
p.s. проект без exe шников, так что можешь смело запускать.
в нем же в дебаге файл input.txt

1|август|2013|2 квітня 2013 р.|4 квітня 2013 р.|
2|август|2013|00 октября 3018 |3 октября 2014|
3|август|2013|22 сентября 2012|31 ноября 3028|
2
Вложения
Тип файла: zip dtp.zip (31.8 Кб, 3 просмотров)
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 32
25.04.2013, 21:11  [ТС] 15
спасибо большое, это как раз то, что надо)
не подскажите как еще можно сделать так Безымянный.png

т е второй пикер показывает на 3 дня больше при запуске, по моим предположениям нужно получить сегодняшнюю дату день .now и прибавить к ней 3, а вот затем .+3 нельзя, toString,Text и подобное пикер не видит(

картинка долго открывается , суть в том что первый пикер показывает 25 апреля 2013
а второй 28 ареля 2013
0
53 / 53 / 5
Регистрация: 06.04.2013
Сообщений: 178
25.04.2013, 22:17 16
о, вроде получилось

увеличиваем день на 3 (к текущей дате прибавляем 3 дня):
C#
1
2
3
4
            var now = DateTime.Now;
            now=now.AddDays(3);
            var today = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second);
            dateTimePicker2.Value = today;
аналогичные методы и для остальных временных сначений



если так сделать, то прокатывает, но если +10 дней, то ошибка конечно:
C#
1
2
3
var now = DateTime.Now;
            var today = new DateTime(now.Year, now.Month, now.Day+3, now.Hour, now.Minute, now.Second);
            dateTimePicker2.Value = today;
2
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 32
25.04.2013, 22:30  [ТС] 17
на 3 мне вполне достаточно)спасибо еще раз)
0
0 / 0 / 1
Регистрация: 20.04.2013
Сообщений: 87
26.04.2013, 00:36 18
а как сделать,чтобы не для dataPicker а вводишь из текстбокса и заменяешь?
строка
1!Хирургия!15!4!
нужно заменить значение 4
0
53 / 53 / 5
Регистрация: 06.04.2013
Сообщений: 178
26.04.2013, 01:14 19
поподробнее, что заменять и на что?
я так понял, есть строка 1!Хирургия!15!4!, т е разделенная "!", нужно заменить значение "4" на что?
на сколько длинная исходная строка?
то же находится в файле?
1
0 / 0 / 1
Регистрация: 20.04.2013
Сообщений: 87
26.04.2013, 08:29 20
текстовый файл выглядит таким образом:
1!Хирургия!15!4!
2!Теропевтическое!20!4!
3!Неврология!10!2!
4!Кардиология!6!3!
5!Геникология!15!6!
6!Офтальмологическое!5!1!
соответствуют num_otdel,name_otdel,kol_place,kol_pasient

разделитель "!".
класс выглядит вот так
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
public struct Otdel
    {
        public string num_otdel, name_otdel, kol_place, kol_pasient;
        public Otdel(string num_otdel,string name_otdel,string kol_place,string kol_pasient)
        {this.num_otdel = num_otdel; this.name_otdel = name_otdel; this.kol_place = kol_place; this.kol_pasient = kol_pasient;
        }
    class Otdelenie
    {
     public string parth;
        public Otdelenie(string parth)
        {
            this.parth=parth;
        }
 
        public string Parth
        {
 
            get { return parth; }
 
            set { parth = value; }
 
        }
 
        }
    }
}[CSHARP]
[/CSHARP]
мне нужно вводить число в textbox (соответствует количеству пациентов)
и нажимая на кнопку "обновить" изменить значение в файле которое означает количество пациентов.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 private void button1_Click(object sender, EventArgs e)
        {
 
            StreamReader reader = new StreamReader("otdel.txt", Encoding.GetEncoding(1251));
 
            string text = reader.ReadToEnd();
 
 
            string[] parts = text.Split('!');
 
            Otdelenie[] a = new Otdelenie[parts.Length / 4];
            int v = 0;
            for (int j = 0; j < parts.Length - 1; j += 4)
            {
                a[v] = new Otdelenie(parts[j], parts[j + 1], parts[j + 2], parts[j + 3]);
                v++;
            }
 
            for (int c = 0; c < a.Length; c++)
дальше я не знаю как делать
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2013, 08:29

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Записать данные в файл txt
Добрый день. Подскажите плз как записать данные в файл с расширением .txt столбиком примерно так:...

Данные записать в файл F1.txt, затем прочитать оттуда, обрабатывались и записывались в бинарный файл F2.bin с проверкой
Никак не получается отладить в BC++ 3.1. Как сделать в классах так, чтобы введённые данные...

Как записать в массив данные из *.TXT и и правильно рассортировать данные по ячейкам массива?
файл index.php &lt;?php $site = (file('text.txt')); в файле text.txt находится: xxxxxx.ru...

Четные записать в файл even.txt, нечетные записать в файл odd.txt
Тема: Файлы....Составить программу,которая считает с клавиатуры числа и четные записывает в файл...


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

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

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