Skip to content

Instantly share code, notes, and snippets.

@cleytonferrari
Created February 20, 2013 02:27
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cleytonferrari/4992229 to your computer and use it in GitHub Desktop.
Save cleytonferrari/4992229 to your computer and use it in GitHub Desktop.
Código do post em meu blog sobre Arquivos CSV com C# no ASP .Net MVC 4
We can make this file beautiful and searchable if this error is corrected: It looks like row 5 should actually have 1 column, instead of 2. in line 4.
NUMCAP;CATINIC;CATFIM;DESCRICAO;DESCRABREV;
1;A00;B99;Capítulo I - Algumas doenças infecciosas e parasitárias;I. Algumas doenças infecciosas e parasitárias;
2;C00;D48;Capítulo II - Neoplasias [tumores];II. Neoplasias (tumores);
3;D50;D89;Capítulo III - Doenças do sangue e dos órgãos hematopoéticos e alguns transtornos imunitários;III. Doenças sangue órgãos hemat e transt imunitár;
4;E00;E90;Capítulo IV - Doenças endócrinas, nutricionais e metabólicas;IV. Doenças endócrinas nutricionais e metabólicas;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Repositorio;
namespace UI.Web.Controllers
{
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
var repositorio = new Repositorio.Repositorio();
var capitulos = repositorio.ListarCapitulos().ToList();
return View(capitulos);
}
public ActionResult Capitulo(string id)
{
var repositorio = new Repositorio.Repositorio();
var capitulo = repositorio.ListarCapitulos().FirstOrDefault(x => x.NumeroCapitulo == id);
ViewBag.capitulo = capitulo;
var grupos = repositorio.ListarGrupos().Where(x =>
x.CategoriaInicialCodigo >= capitulo.CategoriaInicialCodigo &&
x.CategoriaFinalCodigo <= capitulo.CategoriaFinalCodigo
).ToList();
return View(grupos);
}
public ActionResult Grupo(string categoriaInicial, string categoriaFinal)
{
var repositorio = new Repositorio.Repositorio();
var grupo = repositorio.ListarGrupos().FirstOrDefault(x => x.CategoriaInicial == categoriaInicial && x.CategoriaFinal == categoriaFinal);
ViewBag.grupo = grupo;
var capitulo = repositorio.ListarCapitulos().FirstOrDefault(x =>
grupo.CategoriaInicialCodigo >= x.CategoriaInicialCodigo &&
grupo.CategoriaFinalCodigo <= x.CategoriaFinalCodigo
);
ViewBag.capitulo = capitulo;
var categorias = repositorio.ListarCategorias().Where(x =>
x.CodigoDaCategoriaCodigo >= grupo.CategoriaInicialCodigo &&
x.CodigoDaCategoriaCodigo <= grupo.CategoriaFinalCodigo
).ToList();
return View(categorias);
}
public ActionResult Categoria(string codigoDaCategoria)
{
var repositorio = new Repositorio.Repositorio();
var categoria = repositorio.ListarCategorias().FirstOrDefault(x => x.CodigoDaCategoria == codigoDaCategoria);
var subCategorias = repositorio.ListarSubCategorias().Where(x =>
x.CodigoDaCategoria == codigoDaCategoria).ToList();
categoria.ListaDeSubCategorias = subCategorias;
var grupo = repositorio.ListarGrupos().FirstOrDefault(x => categoria.CodigoDaCategoriaCodigo >= x.CategoriaInicialCodigo && categoria.CodigoDaCategoriaCodigo <= x.CategoriaFinalCodigo);
ViewBag.grupo = grupo;
var capitulo = repositorio.ListarCapitulos().FirstOrDefault(x =>
grupo.CategoriaInicialCodigo >= x.CategoriaInicialCodigo &&
grupo.CategoriaFinalCodigo <= x.CategoriaFinalCodigo
);
ViewBag.capitulo = capitulo;
return View(categoria);
}
public ActionResult Detalhe(string codigo)
{
var repositorio = new Repositorio.Repositorio();
var subcategoria = repositorio.ListarSubCategorias().FirstOrDefault(x => x.CodigoDaSubCategoria == codigo);
return View(subcategoria);
}
public ActionResult Busca (string busca)
{
busca = Ferramentas.SubstituiAcentos(busca);
var repositorio = new Repositorio.Repositorio();
var subCategorias = repositorio.ListarSubCategorias().Where(x => x.DescricaoSemAcentos.ToLower().Contains(busca.ToLower())).ToList();
ViewBag.busca = busca;
return View(subCategorias);
}
}
}
@model List<Repositorio.ViewModelCapitulo>
@{
ViewBag.Title = "W7SAUDE";
}
<h2>Busca CID</h2>
<div class="span12" style="margin-left: 0">
@Html.Partial("_formBusca")
<div class="span9">
@foreach (var capitulo in Model)
{
<div class="span6" style="margin-left: 0; height: 110px; padding: 5px;">
@{
var titulo = capitulo.Descricao.Split('-');
titulo[0] = titulo[0].Trim();
titulo[1] = titulo[1].Trim();
}
<h2><a href="~/Home/Capitulo/@capitulo.NumeroCapitulo">@titulo[0]</a></h2>
<p>@titulo[1]</p>
</div>
}
</div>
</div>
using System.Collections.Generic;
using System.IO;
using CsvHelper;
using CsvHelper.Configuration;
namespace Repositorio
{
public class LerCsv<T> where T : class
{
public IEnumerable<T> Ler(string csv)
{
if (csv == null) return null;
var configuracaoCsv = new CsvConfiguration { Delimiter = ";" };
var csvReader = new CsvReader(new StringReader(csv), configuracaoCsv);
return csvReader.GetRecords<T>();
}
}
}
using System.Collections.Generic;
namespace Repositorio
{
public class Repositorio
{
public IEnumerable<ViewModelCapitulo> ListarCapitulos()
{
var recurso = Properties.Resources.CID_10_CAPITULOS;
return new LerCsv<ViewModelCapitulo>().Ler(recurso);
}
public IEnumerable<ViewModelGrupo> ListarGrupos()
{
var recurso = Properties.Resources.CID_10_GRUPOS;
return new LerCsv<ViewModelGrupo>().Ler(recurso);
}
public IEnumerable<ViewModelCategoria> ListarCategorias()
{
var recurso = Properties.Resources.CID_10_CATEGORIAS;
return new LerCsv<ViewModelCategoria>().Ler(recurso);
}
public IEnumerable<ViewModelSubCategoria> ListarSubCategorias()
{
var recurso = Properties.Resources.CID_10_SUBCATEGORIAS;
return new LerCsv<ViewModelSubCategoria>().Ler(recurso);
}
public IEnumerable<ViewModelGrupoCid0> ListarGruposCid0()
{
var recurso = Properties.Resources.CID_O_GRUPOS;
return new LerCsv<ViewModelGrupoCid0>().Ler(recurso);
}
public IEnumerable<ViewModelCategoriaCid0> ListarCateogiasCid0()
{
var recurso = Properties.Resources.CID_O_CATEGORIAS;
return new LerCsv<ViewModelCategoriaCid0>().Ler(recurso);
}
}
}
public class ViewModelCapitulo
{
//NUMCAP: número do capítulo (em numeração arábica); se igual a zero, indica o capítulo que contém os códigos não oficialmente pertinentes à CID-10;
[CsvField(Name = "NUMCAP")]
public string NumeroCapitulo { get; set; }
//CATINIC: código da primeira categoria do capítulo;
[CsvField(Name = "CATINIC")]
public string CategoriaInicial { get; set; }
[CsvField(Ignore = true)]
public int CategoriaInicialCodigo
{
get { return Ferramentas.TrocaLetraPorNumero(CategoriaInicial); }
}
//CATFIM: código da última categoria do capítulo;
[CsvField(Name = "CATFIM")]
public string CategoriaFinal { get; set; }
[CsvField(Ignore = true)]
public int CategoriaFinalCodigo
{
get { return Ferramentas.TrocaLetraPorNumero(CategoriaFinal); }
}
//DESCRICAO: descrição (nome) do capítulo; e
[CsvField(Name = "DESCRICAO")]
public string Descricao { get; set; }
//DESCRABREV: descrição (nome) abreviado do capítulo, com até 50 caracteres.
[CsvField(Name = "DESCRABREV")]
public string DescricaoAbreviada { get; set; }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment