Дан строковый файл, содержащий даты в формате «день/месяц/год» - 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); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д