vcf文件分解

//========================================================================
//TITLE:
//    vcf文件分解
//AUTHOR:
//    norains
//DATE:
//    Saturday 4-October-2008
//Environment:
//    NONE
//========================================================================
    不知为何,索爱K750再也起不来了,只好去买款NOKIA 5320。所幸的是,之前索爱K750有一部分联系人是存在PC的的玩转手机这款软件中,只是没想到玩转手机是将所有的联系人全部导出到一个文件,而我的5320对同一个文件只能识别一个联系人。无奈,顺手写了个程序,将同一个文件中的联系人提取出来,分别保存为同名文件。
   
    因为只是简单的提取,方便自己,所以路径是固定的。如果各位朋友打算使用该代码,可以将路径改为相对应的文件。当然,最好是做一个弹出对话框,选择文件了,呵呵~
   
    代码如下;
   
    // VCardConvert.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "string"
#include "vector"
#include "map"

#define STR_BEGIN_FLAG  "BEGIN:VCARD"
#define STR_END_FLAG  "END:VCARD"
#define STR_NAME_FLAG  ";"
 
#define STR_FILE_READ  "H://电话簿.vcf"
#define STR_SAVE_FOLDER  "h://电话本//"

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
  // TODO: Place code here.

 HANDLE hFileRead = CreateFile(STR_FILE_READ,GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
 if(hFileRead == INVALID_HANDLE_VALUE)
 {
  return 0x01;
 }

 //The read buffer
 std::vector<char> vtBuf(GetFileSize(hFileRead,NULL),0);

 //Read the file
 DWORD dwRead = 0;
 ReadFile(hFileRead,&vtBuf[0],vtBuf.size(),&dwRead,NULL);
 if(dwRead == 0)
 {
  return 0x02;
 }

 //The buffer for finding
 std::string strBuf(vtBuf.begin(),vtBuf.end());
 std::map<std::string,std::string> mpWrite;
 //std::vector<std::string> vtStore;

 //Store the content
 std::string::size_type posBegin = strBuf.find(STR_BEGIN_FLAG,0);
 std::string::size_type posEnd = 0;
 while(posBegin != std::string::npos)
 {
  posEnd = strBuf.find(STR_END_FLAG,posBegin);
  if(posEnd == std::string::npos)
  {
   break;
  }

  std::string::size_type posNameBegin = strBuf.find(STR_NAME_FLAG,posBegin);
  std::string::size_type posNameEnd = strBuf.find(STR_NAME_FLAG,posNameBegin + 1);
  if(posNameBegin != std::string::npos && posNameEnd != std::string::npos)
  {
   mpWrite.insert(std::make_pair(std::string(strBuf.begin() + posNameBegin + 1, strBuf.begin() + posNameEnd),
           std::string(strBuf.begin() + posBegin, strBuf.begin() + posEnd + strlen(STR_END_FLAG))));
  }

  posBegin = strBuf.find(STR_BEGIN_FLAG,posEnd);
  //vtStore.push_back(std::string(strBuf.begin() + posBegin, strBuf.begin() + posEnd + strlen(STR_END_FLAG)));
 
 
 } 

 CloseHandle(hFileRead);


 //Write the text

 for(std::map<std::string,std::string>::iterator iter = mpWrite.begin(); iter != mpWrite.end(); iter ++)
 {
  std::string strFile = STR_SAVE_FOLDER;
  strFile += iter->first;
  strFile += ".vcf";
  HANDLE hFileWrite = CreateFile(strFile.c_str(),GENERIC_WRITE,NULL,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
  if(hFileWrite == INVALID_HANDLE_VALUE)
  {
   return 0x01;
  }
  DWORD dwWrite = 0;
  WriteFile(hFileWrite,iter->second.c_str(),iter->second.size(),&dwWrite,NULL);
  CloseHandle(hFileWrite);
 }


 return 0;
}

 

 

RStudio 是一款非常流行的、基于 R 语言的集成开发环境 (IDE),用于数据科学和统计分析。虽然 RStudio 主要围绕 R 脚本和语言运行,但它也支持多种其他编程语言及其相应的库和功能。读取 VCF 文件通常涉及到遗传学数据处理,这种文件类型在生物信息学领域常见于存储基因变异的信息。 要在 R 中使用 RStudio 读取 VCF 文件,你需要安装一些特定的包。最常用的包之一是 `VariantAnnotation`,它提供了一个用于解析 VCF 文件的功能丰富的工具集。 ### 安装和加载必要的包 首先,在 RStudio 的 R 控制台输入以下命令来安装 `VariantAnnotation` 包: ```R install.packages("VariantAnnotation") ``` 安装完成后,需要加载这个包以便在当前会话中使用其功能: ```R library(VariantAnnotation) ``` ### 读取 VCF 文件 使用 `readVcf()` 函数可以将 VCF 文件读入到 R 环境中。假设您有一个名为 `example.vcf.gz` 的压缩 VCF 文件,您可以使用以下命令读取它: ```R # 假设您的 VCF 文件路径是 '/path/to/example.vcf.gz' v <- readVcf('/path/to/example.vcf.gz') ``` 这里使用了默认设置。如果需要更多控制选项,如忽略注释、指定样本等,可以调整 `readVcf()` 函数的参数。 ### 检查和处理 VCF 数据 一旦 VCF 文件被读取,你可以通过打印变量 `v` 或者使用 `summary(v)` 来查看数据结构和基本信息。之后,你可以利用这些数据进行各种遗传分析,例如查找特定位置的变异类型(SNP, INDEL等),计算等位基因频率,或者生成可视化结果。 ### 相关问题: 1. 如果 VCF 文件中包含了大量的注释信息,如何提取特定类型的注释数据并进行分析? 2. 当处理大 VCF 文件时,遇到内存限制问题怎么办? 3. 如何将从 VCF 文件获取的数据整合进其他数据分析流程中,比如与外部数据库的关联分析? --- 记得在每次操作之前检查错误和警告信息,并根据需要调整代码以优化性能或适应特定的数据需求。R 提供的强大功能使其成为生物信息学研究和遗传数据处理的理想选择。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值