Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >验证文本文件分隔行的面向对象方法

验证文本文件分隔行的面向对象方法
EN

Stack Overflow用户
提问于 2015-09-14 03:24:39
回答 2查看 373关注 0票数 0

我在文本文件中有一个管道分隔行。验证行的最佳方法是什么。我有一个明确的格式,如何在行中的每一个令牌应该是,例如;假设第5项应该是一个日期。

有谁能帮我实现这一目标的最好的面向对象的方法是什么?有什么设计模式可以实现吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-14 03:40:51

您正在寻找用于验证的特定模式。这可以通过多种方式完成,但最简单的方法是在对象的构造函数中进行验证。由于您正在寻找一种更面向对象的方法,您可能会考虑创建一个对象来表示文件,并创建一个对象来表示每个记录。除了联想之外,这里没有真正的模式。但是,您可以利用迭代器模式允许在循环中迭代记录。您说的是读取文本文件,所以这还不够复杂,但如果是这样的话,您可以考虑创建文件对象的工厂模式。如果需要验证的内容很多,那么您可以创建一个单独的方法来验证类中的每个方法。我说的就是一个例子..。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 static void Main(string[] args)
    {

        DataFile myFile = new DataFile(@"C:\...");

        foreach (DataRecord item in myFile)
        {
            Console.WriteLine("ID: {0}, Name: {1}, StartDate: {2}", item.ID, item.Name, item.StartDate);
        }

        Console.ReadLine();
    }


    public class DataFile : IEnumerable<DataRecord>
    {
        HashSet<DataRecord> _items = new HashSet<DataRecord>();


        public DataFile(string filePath)
        {
            // read your file and obtain record data here... 
            //I'm not showing that
            //... then begin iterating through your string results
            //... though I'm only showing one record for this example

            DataRecord record = new DataRecord("1234|11-4-2015|John Doe");
            _items.Add(record);
        }


        public IEnumerator<DataRecord> GetEnumerator()
        {
            foreach (DataRecord item in _items)
            {
                yield return item;
            }
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }

    public class DataRecord
    {
        private int _id;

        public int ID
        {
            get { return _id; }
            private set { _id = value; }
        }

        private DateTime _startDate;

        public DateTime StartDate
        {
            get { return _startDate; }
            private set { _startDate = value; }
        }

        private string _name;

        public string Name
        {
            get { return _name; }
            private set { _name = value; }
        }

        internal DataRecord(string delimitedRecord)
        {
            if (delimitedRecord == null)
                throw new ArgumentNullException("delimitedRecord");

            string[] items = delimitedRecord.Split('|');


            //You could put these in separate methods if there's a lot

            int id = 0;
            if (!int.TryParse(items[0], out id))
                throw new InvalidOperationException("Invalid type...");

            this.ID = id;

            DateTime startDate = DateTime.MinValue;
            if (!DateTime.TryParse(items[1], out startDate))
                throw new InvalidOperationException("Invalid type...");

            this.StartDate = startDate;

            //This one shouldn't need validation since it's already a string and 
            //will probably be taken as-is
            string name = items[2];

            if (string.IsNullOrEmpty(name))
                throw new InvalidOperationException("Invalid type...");

            this.Name = name;
        }


    }
票数 1
EN

Stack Overflow用户

发布于 2015-09-14 04:00:35

要做到这一点,“干净”的方法是使用正则表达式。下面是一个基本的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var allLines = new List<string>();

for (int i = 0; i < 5; i++)
{
     allLines.Add("test" + i);
}

// if you add this line, it will fail because the last line doesn't match the reg ex
allLines.Add("test");

var myRegEx = @"\w*\d"; // <- find the regex that match your lines
Regex regex = new Regex(myRegEx);
var success = allLines.All(line => regex.Match(line).Success);

在本例中,我的regex正在等待一个单词,后面紧跟着一个数字。你所要做的就是找到与你的线条相匹配的正则表达式。

您还可以使用更复杂的reg来避免linq表达式。

把你的钱给我们这样我们就可以帮你了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32563598

复制
相关文章
iOS在线音频流播放
前言 这是一篇关于在线音频播放的文章,参考自苹果OS X的demo。 在移植到iOS后,可以通过iphone播放Mac上面的音频,实现在线播放音频的功能。 本文可以学习到socket编程、AudioFileStream转换音频流、AudioQueue播放音频、信号量的使用。 正文 demo有两个工程,分别是servers和client。 servers是OS X的应用,作为服务端,负责发送音频流数据; client是iOS的应用,作为客户端,负责接收音频流数据; 音频数据通过AudioFil
落影
2018/04/27
2.7K0
iOS在线音频流播放
NoteBurner iTunes DRM Audio Converter for Mac(苹果DRM音频转换器)
NoteBurner iTunes DRM Audio Converter mac版可以一键将DRM保护的音乐文件转换为常见的MP3或者是AAC格式的音频文件,可以在后台以20倍速度记录有声读物。
Mac知识分享
2022/09/02
1K0
Sidify Apple Music Converter mac(Apple音乐转换器)
Sidify Apple Music Converter是一款全功能,功能强大的专业Apple音乐转换器,不仅可以转换Apple音乐文件,还可以转换所有可在iTunes中播放的音乐,包括iTunes M4A / M4B,Audible AA / AAX有声读物和iTunes M4P音乐,转换时可以选择最大20倍的转换速度。
Mac小小
2022/08/26
1.3K0
iOS AVDemo(3):音频封装,采集编码并封装为 M4A丨音视频工程示例
iOS/Android 客户端开发同学如果想要开始学习音视频开发,最丝滑的方式是对音视频基础概念知识有一定了解后,再借助本地平台的音视频能力上手去实践音视频的采集 → 编码 → 封装 → 解封装 → 解码 → 渲染过程,并借助音视频工具来分析和理解对应的音视频数据。
关键帧
2022/06/13
5820
iOS AVDemo(3):音频封装,采集编码并封装为 M4A丨音视频工程示例
iOS/Android 音视频开发专题
记得从 2016 年起我开始从事音视频 SDK 开发,当时音频技术处于零基础阶段。现在 Android 和 iOS SDK 已迭代至 v3.x 版本。在期间得到很多乐于分享的开发者帮助,如果没有他们分享的精神,我无法完成这么复杂的工作。现在,我也愿意把自己在音视频领域积累的开发经验分享出来,让相关开发者能够得到一点启发和帮助。
100001509164
2022/01/20
8540
使用播放器播放视频有黑边
1.推流端推的画面本身有黑边。因为SDK推流只支持16:9(或者9:16)的画面,如果推流端采集的画面不是16:9的,SDK编码时也会编码成16:9的比例,多出来的部分以黑色填充,具体表现就是编码出来的画面有黑边。这样的情况拉流端SDK一般是处理不了的
腾讯云-qichengdeng
2019/09/05
2.9K0
iOS音频播放(一)
转载: http://msching.github.io/blog/2014/07/07/audio-in-ios/
音视频_李超
2020/04/02
1.8K0
AudFree Audio Converter 2.9.0 Mac音频格式文件转换器
AudFree Audio Converter是一款功能强大的音频转换软件,该软件的最大特点是支持多种加密音频格式的转换,如DRM M4P、M4B、AA、AAX等,可以帮助用户轻松转换iTunes购买的音频、亚马逊音乐等流媒体平台下载的音频。
用户1517359
2023/05/20
5890
AudFree Audio Converter 2.9.0 Mac音频格式文件转换器
AudioToolbox_如何录制PCM格式的数据
先来认识一下头文件 AudioConverter.h: 音频转换接口。定义用于创建和使用音频转换器的接口 AudioFile.h: 定义一个用于读取和写入文件中的音频数据的接口。 AudioFileStream.h: 定义了一个用于解析音频文件流的接口。 AudioFormat.h: 定义用于分配和读取音频文件中的音频格式元数据的接口。 AudioQueue.h: 定义播放和录制音频的接口。 AudioServices.h: 定义三个接口。系统健全的服务让你播放简短的声音和警报。音频硬件服务提供了一个轻量级的接口,用于与音频硬件交互。音频会议服务,让iPhone和iPod触摸应用管理音频会议。 AudioToolbox.h: 顶层包括音频工具箱框架的文件。 AuGraph.h:定义用于创建和使用音频处理图形界面。 ExtendedAudioFile.h: 定义用于将音频数据从文件直接转化为线性PCM接口,反之亦然。
酷走天涯
2018/09/14
1.5K0
AudioToolbox_如何录制PCM格式的数据
iOS AVDemo(4):音频解封装,从 MP4 中解封装出 AAC丨音视频工程示例
iOS/Android 客户端开发同学如果想要开始学习音视频开发,最丝滑的方式是对音视频基础概念知识有一定了解后,再借助本地平台的音视频能力上手去实践音视频的采集 → 编码 → 封装 → 解封装 → 解码 → 渲染过程,并借助音视频工具来分析和理解对应的音视频数据。
关键帧
2022/06/13
5170
iOS AVDemo(4):音频解封装,从 MP4 中解封装出 AAC丨音视频工程示例
使用AudioToolbox播放AAC
前言 使用VideoToolbox硬编码H.264 使用VideoToolbox硬解码H.264 使用AudioToolbox编码AAC 在上一篇中,介绍了如何从麦克风采集声音并用AudioToolbox编码成AAC码流,这次是使用AudioToolbox来播放之前录制的AAC码流。 介绍 在iOS设备上播放音频,可以使用AVAudioPlayer(AVFoundation框架内),但是不支持流式播放。 Apple recommends that you use this class for aud
落影
2018/04/27
1.5K0
使用AudioToolbox播放AAC
FFmpeg4.0+SDL2.0笔记07:Seeking
背景:在系统性学习FFmpeg时,发现官方推荐教程还是15年的,不少接口已经弃用,大版本也升了一级,所以在这里记录下FFmpeg4.0+SDL2.0的学习过程。
非一
2021/04/13
6540
FFmpeg推流到Nginx并使用播放器播放
如今直播很火,下面就简单分享下我是如何直播的。必备工具:FFmpeg,Nginx,还有一个播放器。之前在实例解析中分享过如何用FreeSWITCH来做直 播,这次分享下如何用FFmpeg配合Nginx做直播。
杜金房
2020/12/21
1.9K0
使用PWM实现语音播放
链接:https://community.arm.com/cn/b/blog/posts/nucleof429-2-pwm
MCU起航
2021/04/23
2.9K0
delphi 使用windowsmediaplayer播放视频
delphi7中原本自带的一个Tmediaplayer控件,但是发现有不少视频是无法播放的,于是就想到了用windowsmediaplayer来进行播放。
Vaccae
2019/07/25
3.1K0
delphi 使用windowsmediaplayer播放视频
超级播放器点播如何使用Fileid加密播放?
1.播放视频中会有一些视频不想被没获取到或者不想别人看到,这个时候就会用到加密,超级播放是通过视频文件的id来进行加密
腾讯云-qichengdeng
2019/09/12
1.6K0
使用Python,怎么播放视频?
使用Python,怎么播放视频? 昨天分享了用python播放音频,今天来分享一下播放视频。将这一主题补充完整。 import numpy as np import cv2 cap = cv2.VideoCapture('vtest.avi') while(cap.isOpened()): ret, frame = cap.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow('frame',gray
TalkPython
2020/12/29
1.7K0
点击加载更多

相似问题

AudioQueue内存播放示例

33

播放中的AudioQueue间隙

10

ios音频:使用audioqueue改变播放进度

18

在使用AudioQueue录制的同时使用MPMoviePlayerController播放视频

10

无法同时录制/播放AudioQueue和动画

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文