Дан строковый файл, содержащий даты в формате «день/месяц/год» - 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);
}