Консультант Витте
 Аватар для DmitryM5
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,356
Записей в блоге: 1

Дан строковый файл, содержащий даты в формате «день/месяц/год»

20.02.2016, 23:32. Показов 5543. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан строковый файл, содержащий даты в формате «день/месяц/год», причем под день и месяц отводится по две позиции, а под год — четыре (например, «16/04/2001»). Создать два файла целых чисел, первый из которых содержит значения дней, а второй — значения месяцев для дат из исходного строкового файла (в том же порядке).

Пример на скрине приведен.
Проблема
1.BinaryReader считывает не все даты,а только часть.Скорее всего проблема в pos += str.Length*sizeof(char); Я читаю больше чем нужно для одной даты что ли...
Тогда вопрос как правильно читать строки таким образом?
2.Записывается в файлы ерунда какая то.Хотя по идее я пишу верную строку с помощью .Write(t1); (при откладке в t1 попадает верный кусок даты)...


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
using PT4;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace PT4Tasks
{
    public class MyTask: PT
    {
        public static void Solve()
        {
            Task("File");
            string file_name_in = GetString();
            string file_name_out1 = GetString();
            string file_name_out2 = GetString();
            FileStream fs_in, fs_out1, fs_out2;
            BinaryReader br;
            BinaryWriter bw1, bw2;
            fs_in = File.Open(file_name_in, FileMode.Open);
            fs_out1 = File.Open(file_name_out1,FileMode.Create);
            fs_out2 = File.Open(file_name_out2,FileMode.Create);
            br = new BinaryReader(fs_in);
            bw1 = new BinaryWriter(fs_out1);
            bw2 = new BinaryWriter(fs_out2);
            int pos = 0;
            while (pos < br.BaseStream.Length)
            {
                string str = br.ReadString();
                string[] tmp=str.Split('/');
                string t1;
                if (tmp[0][0] == '0'){
                     t1=tmp[0][1].ToString();
                }
                else
                     t1=tmp[0][0].ToString() + tmp[0][1].ToString();
                    bw1.Write(t1);
 
 
                    if (tmp[1][0] == '0')
                    {
                        t1 = tmp[1][1].ToString();
                    }
                    else
                        t1 = tmp[1][0].ToString() + tmp[1][1].ToString();
                    bw2.Write(t1);
                pos += str.Length*sizeof(char);
            }
            fs_in.Close();
            fs_out1.Close();
            fs_out2.Close();
            br.Close();
            bw1.Close();
            bw2.Close();
 
        }
    }
}
Миниатюры
Дан строковый файл, содержащий даты в формате «день/месяц/год»  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.02.2016, 23:32
Ответы с готовыми решениями:

Получить год, месяц и день из базы данных
Всем привет, нужно достать из базы данных дату в формате dd.mm.yyyy и записать ее в поле таблицы DataTable. Написал такой запрос: Select...

Создать счетчик посещений сайта за год, месяц и день
Microsoft Visual Web Developer 2010 нужно создать счетчик посещений сайта за год, месяц и день.. как и куда это написать?? заранее...

Дата в формате <день>.<месяц>.<год>
а дальше нужно будет определить, например, сколько дней прошло с начала года и т.п. Подскажите, пожалуйста, как правильно получить...

6
Эксперт .NET
6525 / 4101 / 1606
Регистрация: 09.05.2015
Сообщений: 9,565
21.02.2016, 00:50
Зачем тут BinaryReader если файл текстовый? StreamReader/Writer используйте.
1
Консультант Витте
 Аватар для DmitryM5
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,356
Записей в блоге: 1
21.02.2016, 01:20  [ТС]
Окей,но мой способ тоже имеет право существовать?
Что в нем не так?
0
Эксперт .NET
6525 / 4101 / 1606
Регистрация: 09.05.2015
Сообщений: 9,565
21.02.2016, 01:30
Цитата Сообщение от DmitryM5 Посмотреть сообщение
Что в нем не так?
Ну хотя бы то, что вы читаете текстовый файл бинарным ридером, к тому же не учитывая нюансы его работы, например метод ReadString() ожидает что перед строкой указывается ее длинна...

BinaryReader.ReadString()

Reads a string from the current stream.The string is prefixed with the length, encoded as an integer seven bits at a time.
1
Консультант Витте
 Аватар для DmitryM5
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,356
Записей в блоге: 1
21.02.2016, 12:42  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Ну хотя бы то, что вы читаете текстовый файл бинарным ридером, к тому же не учитывая нюансы его работы, например метод ReadString() ожидает что перед строкой указывается ее длинна...
Я все таки не пойму,если по заданию файл содержит строки то это сразу текстовый файл?
Я не могу посредством FileStream выполнить чтение и запись?
Далее я не могу понять что не так делаю при ReadString(),везде в примерах строке присваивается .ReadString() и ничего более..
Плюс когда пишу в другой файл строку t1,там лежит верное значение,а на выходе непонятно что показывает?

Есть ли выход из этого с изменением моего текста программы?
0
 Аватар для 1231231ghacking
102 / 106 / 62
Регистрация: 19.11.2015
Сообщений: 380
21.02.2016, 12:51
попробуй File.ReadAllLines
1
Консультант Витте
 Аватар для DmitryM5
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,356
Записей в блоге: 1
21.02.2016, 13:00  [ТС]
Все разобрался,всем спасибо!
При выполнении заданий на языках C# и VB.NET предполагается, что элементы в двоичном строковом файле всегда имеют одинаковую длину, равную 80 символам (строки меньшей длины дополняются справа пробелами). Это обеспечивает возможность прямого доступа к файловой строке по ее номеру, однако требует удаления завершающих пробелов после считывания строки из файла (для удаления завершающих пробелов можно использовать метод TrimEnd() класса String). Соответственно, перед записью строки в двоичный файл необходимо дополнить ее справа пробелами до 80 символов (для этого достаточно использовать метод PadRight(80) класса String). Помимо символов в строковом файле также хранится информация о длине каждой строки. В случае строки длины 80 эта информация кодируется 1 байтом, поэтому размер каждого элемента в строковом файле в данном случае будет равен 81 байту. Таким образом, если при выполнении задания требуется определить количество элементов в строковом файле, то достаточно разделить размер файла (в байтах) на 81.

Как то так(по 81 байту плюсовал для pos и выше соответственно записывал в файл не то что нужно,нужно int,а я string до этого писал...):
C#
1
2
3
4
5
6
7
8
9
while (pos < br.BaseStream.Length)
            {
                string str = br.ReadString();
                string[] tmp=str.Split('/');
                
                    bw1.Write(int.Parse(tmp[0]));
                    bw2.Write(int.Parse(tmp[1]));
                pos += (str.Length+1);
            }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.02.2016, 13:00
Помогаю со студенческими работами здесь

Задана дата в формате <день>.<месяц>.<год>
Задана дата в формате &lt;день&gt;.&lt;месяц&gt;.&lt;год&gt;. Определить: 1) сколько дней прошло с начала года; 2) сколько дней осталось до конца года; ...

Дан строковый файл. Создать новый строковый файл, содержащий все строки исходного файла наибольшей длины
Всем привет! Кто может помочь с двумя небольшими програмками по работе с файлами? Очень буду благодарен... 2)Дана строка S нулевое,...

Задана дата в формате <день>.<месяц>.<год>. Определить
Задана дата в формате &lt;день&gt;.&lt;месяц&gt;.&lt;год&gt;. Определить 1. сколько дней прошло с начала года; 2. сколько дней осталось до конца года; ...

Создать класс для представления даты с полями год, месяц, день
Мне нужно создать класс для представления даты с полями год, месяц, день и в случае недопустимых значений полей выбрасывать исключения. Так...

Создать класс Date для работы с датами в формате "год.месяц.день"
надо написать класс 1 контрольная 8 задание. только срочно в понедельник уже сдать надо. заранее спасибо.


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

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

Новые блоги и статьи
Тестирование Pull Request в Kubernetes с vCluster
Mr. Docker 19.07.2025
Часто сталкиваюсь с серьезной дилемой при настройке тестовых окружений для проверки Pull Request в Kubernetes. С одной стороны, каждый PR требует изолированной среды — только так можно гарантировать,. . .
Мой 7 минутный ролик с крамольным предложением про шахматы, предлагаю заценить
_Ivana 18.07.2025
p2UhJNMGY94
Десять Middleware Node.js для эффективного кодинга
Reangularity 18.07.2025
Когда я только начинал работать с Node. js, количество пакетов в npm меня буквально парализовало. Сегодня их больше 1,3 миллиона — попробуй разберись, что стоит твоего внимания, а что нет. Я потратил. . .
Context и глубины Android
mobDevWorks 18.07.2025
В Android разработки Context напоминает воздух - он везде, жизненно необходим, но мало кто может детально объяснить его природу. Мы привыкли получать его как параметр, передавать дальше и. . .
Результаты исследования от команды MCM (июль 2025 г.)
Programma_Boinc 18.07.2025
Результаты исследования от команды MCM (июль 2025 г. ) Как сообщалось в наших предыдущих публикациях, мы изучаем гены, которые имеют наибольший рейтинг и ассоциируются с различными видами рака, в. . .
ИИ-чатбот на React с OpenAI и LangChain.js
Reangularity 17.07.2025
React давно стал для меня золотым стандартом фронтенд-разработки. Его компонентная структура, виртуальный DOM и однонаправленный поток данных идеально подходят для создания динамичных интерфейсов. . .
Пишем адаптер для локального хранилища S3 на C#
stackOverflow 16.07.2025
Разработка современных приложений часто требует интеграции с объектными хранилищами, и Amazon S3 стал де-факто стандартом в этой области. Однако работа с облачными сервисами в процессе разработки. . .
Старые замки
kumehtar 16.07.2025
Смотрел тут фото, попались пара старых замков. И сразу бросилось в глаза из отличие. Например: Замок Бистон, в англии. Разрушенное сооружение. Но - не испорченное людьми, по крайней мере - на. . .
Java и Eclipse Store: Сверхбыстрые приложения с In-Memory DB
Javaican 15.07.2025
Eclipse Store — это микро-движок персистентности для Java, который позволяет хранить и извлекать нативные Java-объекты без необходимости преобразования данных или использования объектно-реляционного. . .
EmBitz, создание проекта, отладка, прошивка
locm 15.07.2025
Создание проекта для Blue Pill (STM32F103C8T6) в EmBitz 2. 30, написания кода blink, запуск отладки в ОЗУ, заливка релизной прошивки во flash используя ST-Link и др. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru