Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 21.07.2015
Сообщений: 2

Разобрать длинную строку по смещениям

18.12.2015, 08:29. Показов 759. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Есть самодельный файл с данными - данные идут блоками по 1024 байта с четко указанными границами.
Все это идет одной единственной строкой. Размер файла пока максимально 100 мегабайт.
Хочу все это загнать в базу данных или хотябы в csv.
Как это лучше всего сделать?
Пока я вижу так: открыть через streamreader, порезать файл в на строки String.Split , а потом циклом разбирать каждую строку по смещениям. Там 25 полей, каждое обходить в цикле - как то некрасиво получается.

Может есть вариант проще или надежнее(Стримридер, как я понял читает файл по строкам, он от такой длинны не загнется)?
Временно хранить можно в массиве или лучше изучать коллекции? там дата, текст, булевые значения и float в перемешку.
Пример файла данных в data.txt а в Структура файла.txt какие поля, какое у них смещение и длинна блока данных.
Вложения
Тип файла: txt data.txt (12.0 Кб, 9 просмотров)
Тип файла: txt Структура файла.txt (679 байт, 10 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.12.2015, 08:29
Ответы с готовыми решениями:

Перевести длинную бинарную строку в строку с десятичными цифрами
Добрый день. Проблема следующая: есть бинарное число 11010111010111111110.......11100011010110110 - необходимо его представить в виде...

Разделить длинную строку
Проблема такая в чате например нужно что то сделать с таким сообщением ...

Найти самую длинную строку
/* Самая длинная строка 1. Создай список строк. + 2. Считай с клавиатуры 5 строк и добавь в список. + 3. Используя цикл, найди...

3
44 / 33 / 14
Регистрация: 27.04.2012
Сообщений: 153
18.12.2015, 09:46
Как это всё считывать правильно не подскажу, а для хранения я бы использовал DataTable.
Потом и в БД и в эксель удобно выводить будет.
0
0 / 0 / 0
Регистрация: 21.07.2015
Сообщений: 2
19.12.2015, 09:16  [ТС]
Svorky, прикольная штука, когда дело до базы дойдет, попробую использовать
пока задача мельче
накарабал вот такой текст
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string file = @"c:\data.txt";
            string tempFile = System.IO.Path.GetTempPath() + "temp.txt";
            //string tempFile = @"c:\Users\sergey\temp.txt";
            char[] shortLine = new char[1024];
 
            if (File.Exists(tempFile))
            {
                File.Delete(tempFile);
            }
           
            using (StreamReader sr = new StreamReader(file, System.Text.Encoding.Default))
            {
                while (sr.Peek() >= 0)
                {
                    sr.ReadBlock(shortLine, 0, 1024);
                    using (StreamWriter sw = File.AppendText(tempFile))
                    {
                       
                        sw.WriteLine(shortLine);
                        //sw.Close(); кажется, он тут не нужен, все само и так закрывается
                        
                    }
                    
                    
                    //Console.ReadKey();
                }
                //sr.Close();
                
            }
            
        }
    }
}
Сейчас программа не дохнет на обработке 120 мегабайт текста.
Она делит исходник на строки по 1024 символа и пишет во временный файл. Хоть что-то уже.
Теперь надо из массива сразу вытаскивать нужные мне поля, отсекать лишние пробелы и выгонять результат в csv или сразу в эксель.
Как освою, пойдет следующий шаг - разбирать нужные поля в нужный тип данных и писать в таблицу:
скажем дату хранить именно как дату в базе, а не как текст и т.п.
Ну а потом уже полировка: хранение временных данных в памяти, try\catch, как сделать правильно апдейт базы данных, чтобы не перезаписывать всю таблицу каждый раз.
Ну и финал: отображение в веб форме с поиском по дате, менеджеру и клиенту.
Вложения
Тип файла: txt Результат работы программы.txt (12.0 Кб, 5 просмотров)
0
44 / 33 / 14
Регистрация: 27.04.2012
Сообщений: 153
21.12.2015, 10:46
coldmorfey, отсекать пробелы можно с помощью String.Trim(), TrimStart(), TrimEnd().
Для полей можно класс написать. Объекты в какой-нибудь лист класть вот так.
C#
1
2
3
4
5
6
7
List<MyClass> cls = new List<MyClass<();
cls.Add(new MyClass(){
    FirstName = "Ivan",
    LastName = "Ivanov",
    Age = 25
}
);
Либо конструктор написать и тогда писать так
C#
1
new MyClass("Ivan", "Ivanov", 25)
На работе похожие задачи есть. Я так делал раньше, но сейчас сразу в таблицу решил писать. И дело тут даже не базе, а то что такие массивы данных как у тебя и у меня тут на работе ни чем лучше не сохранить. Делал я ужасные вещи со словарями, но когда количество полей начало становиться хаотичным, я перешёл на таблицы.
Записывать объекты или в таблицу класть можно сразу как считаешь строку, если сразу сможешь задать, что где расположено.

Для экселя можно стандартной Microsoft.Interop.Excel пользоваться или есть сторонняя хорошая NetOffice.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.12.2015, 10:46
Помогаю со студенческими работами здесь

В файле самую длинную строку
#include &quot;stdafx.h&quot; using namespace System; using namespace System::IO; int main(array&lt;System::String ^&gt; ^args) { String ^s,^str,...

Выбрать наиболее длинную строку.
В универе дали лабораторную работу, а я эту тему вообще не понял, помогите пожалуйста, если не сдам не поставят зачет.. Вот задание: ...

Разбить длинную строку на строки?
Есть очень длинная сплошная строка в файле .txt. Нужно разбить ее на сроки по n символов, то есть вставить перенос строки через...

Поместить в стек длинную строку
У меня есть программа на asm, которая запускает калькулятор, т.е. помещает в стек &quot;calc&quot; в обратном порядке, конец строки и ещё...

StatusBar не отображает длинную строку
Здравствуйте! Пытаюсь добавить на компонент StatusBar длинную строку, но она отображается не до конца. В примере на Label отображается...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru