2013-04-15 31 views
0

我想使用libsvm網站上提供的convert.c將csv文件轉換爲libsvm數據格式。但我從不使用C,網站也沒有提供關於如何使用這個程序的任何信息。我能從這裏得到任何提示嗎?以下是代碼。非常感謝。關於使用c程序將csv文件轉換爲特定格式

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

char buf[10000000]; 
float feature[100000]; 

int main(int argc, char **argv) 
{ 
FILE *fp; 

if(argc!=2) { fprintf(stderr,"Usage %s filename\n",argv[0]); } 
if((fp=fopen(argv[1],"r"))==NULL) 
{ 
    fprintf(stderr,"Can't open input file %s\n",argv[1]); 
} 
while(fscanf(fp,"%[^\n]\n",buf)==1) 
{ 
    int i=0,j; 
    char *p=strtok(buf,","); 

    feature[i++]=atof(p); 

    while((p=strtok(NULL,","))) 
     feature[i++]=atof(p); 

    //  --i; 
    /* 
    if ((int) feature[i]==1) 
     printf("-1 "); 
    else 
     printf("+1 "); 
    */ 
    //  printf("%f ", feature[1]); 
    printf("%d ", (int) feature[0]); 
    for(j=1;j<i;j++) 
     printf(" %d:%f",j,feature[j]); 
    printf("\n"); 
} 
return 0; 
    } 
+1

你能描述一下你是如何嘗試使用該程序的?你遇到了什麼問題或者你看到了哪些錯誤。 –

+0

您可能想要在出現無法打開文件的錯誤消息之後出現「exit(EXIT_FAILURE)」,否則您註定不管崩潰。 'fscanf()'不完全包含'NULL'文件指針。 – WhozCraig

回答

0

您可以找到有關如何在這裏使用它的信息:

if(argc!=2) { fprintf(stderr,"Usage %s filename\n",argv[0]); } 
if((fp=fopen(argv[1],"r"))==NULL) 
{ 
    fprintf(stderr,"Can't open input file %s\n",argv[1]); 
} 

所以,你需要提供兩個參數,一個是program name,這是argv[0]argv[1]是輸入文件名。

我猜你應該做的:那麼(首先,代碼編譯成一個EXE文件) 命令行,走的exe文件目錄,鍵入:

programname filename 

才能使用自己的代碼。而programname是轉換程序的名稱。

我的猜測是,該代碼將讀取您的csv文件並提取可用於SVM分類的數據集的所有功能。

+0

謝謝,就像你說的那樣,這個程序將讀取一個csv文件並輸出一個特殊格式的txt文件。還有一個問題,我有Linux的框運行Ubuntu的。如果我想編譯這個c程序,我該怎麼做,還是必須使用任何特定的參數? – user2283247

+0

@ user2283247如果這只是一個.c文件,您可以使用gcc編譯它。例如:gcc conver.c -o convert。那麼在將輸入文件放在源文件的同一目錄中後,在終端執行:./convert filename。它應該運行。 – taocp

+0

@ user2283247你試過了嗎,它工作嗎?如果您有多個源文件,則可能需要使用makefile或者簡單地執行gcc * .cpp -o轉換以生成exe文件(如果所有源文件都位於同一目錄下)。 – taocp

相關問題