c++处理txt常用函数

1.fopen()
FILE *fopen(const char *filename, const char *mode)

#include <stdio.h>
int main ()
{
   FILE *fp;
   int c;
   fp = fopen("file.txt","r");
   while(1)
   {
      c = fgetc(fp);     //int fgetc(FILE *stream);这里返回值是int,为什么下边给的是%c?
      if( feof(fp) )
      { 
          break ;
      }
      printf("%c", c);
   }
   fclose(fp);
   return(0);
}

2.fgets()
char *fgets(char *str, int n, FILE *stream)

#include <stdio.h>
int main()
{
   FILE *fp;
   char str[60];
   /* 打开用于读取的文件 */
   fp = fopen("file.txt" , "r");
   if(fp == NULL) {
      perror("打开文件时发生错误");
      return(-1);
   }
   if( fgets (str, 60, fp)!=NULL ) {
      /* 向标准输出 stdout 写入内容 */
      puts(str);
   }
   fclose(fp);
   return(0);
}

3.sscanf() /fscanf()
作用:匹配字符
int sscanf(const char *str, const char *format, …)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   int day, year;
   char weekday[20], month[20], dtm[100];

   strcpy( dtm, "Saturday March 25 1989" );
   sscanf( dtm, "%s %s %d  %d", weekday, month, &day, &year );

   printf("%s %d, %d = %s\n", month, day, year, weekday );
    
   return(0);
}

4.在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:
  void open(const char* filename,int mode,int access);
参数:
  filename:  要打开的文件名
  mode:    要打开文件的方式
  access:   打开文件的属性
fstream有两个子类:
ifstream(input file stream)和ofstream(outpu file stream),
ifstream默认以输入方式打开文件
ofstream默认以输出方式打开文件。
参考:https://www.cnblogs.com/batman425/p/3179520.html

ifstream file1;
file1.open("c:\\config.sys",ios::binary|ios::in,0);

5.getline(cin, inputLine);

std::string strFeature;
ifstream file1;
static int num_all=0;
file1.open("./feature_4.txt");
if(!file1.is_open())
{
   g_print ("error read feature\n");
}
while(getline(file1,strFeature)){
    num_all++;
}

6.freopen()

FILE *freopen(const char *filename, const char *mode, FILE *stream)
作用:把一个新的文件名 filename 与给定的打开的流 stream 关联,同时关闭流中的旧文件。

#include <stdio.h>
int main ()
{
   FILE *fp;
   printf("该文本重定向到 stdout\n");
   fp = freopen("file.txt", "w+", stdout);
   printf("该文本重定向到 file.txt\n");
   fclose(fp);  
   return(0);
}

需求:处理txt中名字和对应的128维float特征值

xiaoming.jpg -0.097970a0.412450a1.291050a0.029515a-1.281650a1.091200a-0.165351a2.284460a-1.428620a1.243580a0.465420a1.930530a0.118808a-1.720070a-0.959926a-0.570311a1.963640a-0.617950a1.082670a1.013750a-0.257759a0.332777a-1.094700a1.616360a-0.333840a1.275990a0.372964a0.370306a-0.403711a-0.156022a-1.147140a-0.032172a0.565637a0.156215a0.203820a0.143630a0.056337a-1.232980a-1.841970a-0.749862a0.490812a-1.680510a1.179840a-0.510200a-0.503570a0.859547a0.379501a0.319658a-0.558752a0.437925a1.008090a-0.274838a0.812967a-0.190285a0.620005a0.918370a0.560995a0.141753a-0.304128a0.066030a0.612695a-0.721343a-0.475753a-0.170001a-0.109278a1.871000a-0.187824a0.257390a0.684107a1.406470a-0.650492a0.199720a-0.123803a0.738289a-0.731479a0.727681a1.078600a2.656870a-0.396232a-0.788084a0.210822a-0.298030a-3.029180a0.506024a0.826963a-0.323328a-1.789490a-0.810607a-1.245780a1.618990a-0.061182a1.849130a-0.804396a0.215782a0.331796a0.337920a1.713730a-1.083400a0.371835a-0.263305a-0.513203a1.068190a0.416737a0.204614a-0.925300a-0.461793a-0.637195a-1.563390a1.195460a0.555956a-0.189917a-1.622950a0.517580a-0.994719a-1.142570a0.007303a-0.289721a0.899430a-0.114601a-1.350730a0.180728a-1.031870a0.673146a1.105750a1.876910a0.243448a0.439982a-0.13501310
float a[128];
std::string name;
freopen("feature_4.txt","r",stdin);
FeatureDataAll = (float*)calloc(sizeof(float),128 * 100);
for (int j=0; j<num_all;j++)
{
  std::cin>>name;
  int k=0;
  std::cout << name << "\n" << std::endl;
  for (int i=0+j*128;i<128*(j+1);i++)
  {
    std::cin>>a[k];
    FeatureDataAll[i]=a[k];
    k++;
    printf("a%f", FeatureDataAll[i]);
  }
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值