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

Узнай цену своей работы

Формулировка задачи:

Дан строковый файл, содержащий даты в формате «день/месяц/год», причем под день и месяц отводится по две позиции, а под год — четыре (например, «16/04/2001»). Создать два файла целых чисел, первый из которых содержит значения дней, а второй — значения месяцев для дат из исходного строкового файла (в том же порядке). Пример на скрине приведен. Проблема 1.BinaryReader считывает не все даты,а только часть.Скорее всего проблема в pos += str.Length*sizeof(char); Я читаю больше чем нужно для одной даты что ли... Тогда вопрос как правильно читать строки таким образом? 2.Записывается в файлы ерунда какая то.Хотя по идее я пишу верную строку с помощью .Write(t1); (при откладке в t1 попадает верный кусок даты)...
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();
 
        }
    }
}

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

textual
Листинг программы
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);
            }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы