CSV dosyasını sağlayan programın belgelerine bakın. Her satırdaki alan sayısını ve her alanın biçimini belirleyin. Örneğin, bir program aşağıdaki verileri içeren bir CSV sağlıyorsa: 1, "test", 34.5 Üç alanı işaretlersiniz: bir tamsayı, bir dize ve bir kayan noktalı sayı.
CSV'de tanımlanan her alan için bir veri üyesi içeren bir yapı oluşturun. Sağlanan örnek 1, "test", 34.5 satırını kullanarak aşağıdaki yapıya ihtiyacınız olacaktır: struct data { int col1; karakter *kol2; yüzer col3; };
Programınızda CSV dosyasını okumayı işleyecek bir yöntem oluşturun. Bunun programınızın geri kalanı tarafından erişilebilir olması gerekecek ve muhtemelen diğer yöntemlerin okunan verilere erişebilmesi için ortak veri yapıları üzerinde çalışması gerekecek. Dönüş değeri ihtiyacını ortadan kaldırmak için parametreyi referansa göre iletin. Örnek bir işlev prototipi şöyle olabilir: void ParseCSV( char *dosya adı, veri& girdi);
Aşağıdaki kodu kullanarak verileri okuyacak bir dosya nesnesi oluşturun: FILE * pInput;
Bir seferde dosyanın bir satırını tutacak kadar büyük bir karakter arabelleği oluşturun. Dilin kısıtlamaları nedeniyle, bunu yapmanın en basit yolu, aşağıdaki gibi yeterince büyük bir karakter dizisi bildirmektir: #define BUFFER_SIZE 1024
Dosyayı aşağıdaki kodla açın ve daha önce oluşturduğunuz FILE nesnesine atayın: pInput = fopen("filename", "r")
fgets (buf, sizeof (buf), pInput)
"strtok" işlevini kullanarak CSV'yi ayrıştırın. Belirteçlere işaret etmek için yeni bir karakter dizesi oluşturun ve bunu yukarıda okunan satırdaki verilerle başlatın: char *tok = strtok (buf, ",")
Alınan belirteci uygun verilere dönüştürün. Örnek satırı kullanarak: 1, "test", 3.45 "tok" içinde bulunan verileri aşağıdaki kodu kullanarak bir tam sayıya dönüştürün: row.col1 = atoi (tok);
Aynı satırdan sonraki okumalar için, daha önce okuduğunuz arabellek dizesi yerine "strtok" bir NULL parametresi iletin: tok = strtok (NULL, ",") Ardından, belirteci uygun veri türüne dönüştürün. Örnek satır 1,"test",3.45 kullanılarak Tek bir satır için ayrıştırma kodu şöyle olacaktır: char *tok = strtok (buf, ","); satır.col1 = atoi (tok); tok = strtok (BOŞ, ","); satır.col2 = tok; tok = strtok (BOŞ, ","); satır.col3 = atof (tok);
Bunu, CSV'nin her satırındaki tüm girişler için yapın. "strtok" işlevi, arabellekteki veriler bitene kadar virgül değerleri arasındaki verileri sağlamaya devam edecek ve bu noktada NULL döndürecektir. Bu, satırı bitirdiğinizi gösterecektir.
Uyarı
Bir hata varsa "fopen" işlevi NULL döndürebilir - kullanmadan önce dosyanızı kontrol ettiğinizden emin olun. Bazı durumlarda, sağlanan jetonlar beklenen biçimde olmayabilir. Yaygın hata değerlerine (boş dize, NULL, vb.) karşı kontrol ederek körü körüne dönüştürmeden önce verilerinizi incelediğinizden emin olun.