გაეცანით პროგრამის დოკუმენტაციას, რომელიც უზრუნველყოფს CSV ფაილს. განსაზღვრეთ ველების რაოდენობა თითოეულ სტრიქონში, ასევე თითოეული ველის ფორმატი. მაგალითად, თუ პროგრამა უზრუნველყოფს CSV-ს შემდეგი მონაცემებით: 1, "ტესტი", 34.5 თქვენ მონიშნავთ სამ ველს: ერთი მთელი რიცხვი, ერთი სტრიქონი და ერთი მცურავი წერტილის ნომერი.
შექმენით სტრუქტურა, რომელიც შეიცავს მონაცემთა წევრს CSV-ში გამოვლენილი თითოეული ველისთვის. მოწოდებული მაგალითის 1, "ტესტი" 34.5 ხაზის გამოყენებით დაგჭირდებათ შემდეგი სტრუქტურა: struct data { int col1; char *col2; float col3; };
შექმენით მეთოდი თქვენს პროგრამაში, რომელიც გაუმკლავდება CSV ფაილის წაკითხვას. ეს უნდა იყოს ხელმისაწვდომი თქვენი პროგრამის დანარჩენი ნაწილისთვის და სავარაუდოდ უნდა იმუშაოს მონაცემთა საერთო სტრუქტურებზე, რათა სხვა მეთოდებმა შეძლონ წვდომა წაკითხულ მონაცემებზე. გადაიტანეთ პარამეტრი მითითებით, რათა ამოიღოთ დაბრუნების მნიშვნელობის საჭიროება. ფუნქციის პროტოტიპის მაგალითი იქნება: void ParseCSV( char *filename, data& input );
შექმენით ფაილის ობიექტი, რომელიც წაიკითხება მონაცემებში შემდეგი კოდის გამოყენებით: FILE * pInput;
შექმენით საკმარისად დიდი სიმბოლოს ბუფერი, რომ შეინახოს ფაილის ერთი ხაზი ერთდროულად. ენის შეზღუდვების გამო, ამის გაკეთების ყველაზე მარტივი გზაა საკმარისად დიდი ზომის სიმბოლოების მასივის გამოცხადება, მაგალითად: #define BUFFER_SIZE 1024
გახსენით ფაილი შემდეგი კოდით და მიანიჭეთ ის თქვენს ადრე შექმნილ FILE ობიექტს: pInput = fopen("ფაილის სახელი", "r")
fgets (buf, sizeof (buf), pInput)
გაანალიზეთ CSV ფუნქციის "strtok" გამოყენებით. შექმენით ახალი სიმბოლოების სტრიქონი, რომელიც მიუთითებს ტოკენებზე და დააინსტალირეთ იგი ზემოთ წაკითხული ხაზის მონაცემებით: char *tok = strtok (buf, ",")
მიღებული ჟეტონი შესაბამის მონაცემებში გადაიყვანეთ. მაგალითის ხაზის გამოყენებით: 1, "ტესტი", 3.45 გადაიყვანეთ "tok"-ში მოცემული მონაცემები მთელ რიცხვად შემდეგი კოდის გამოყენებით: row.col1 = atoi (tok);
იმავე სტრიქონიდან შემდგომი წაკითხვისთვის, გადაიტანეთ "strtok" NULL პარამეტრი ბუფერული სტრიქონის ნაცვლად, რომელიც ადრე წაიკითხეთ: tok = strtok (NULL, ",") შემდეგ, გადააკეთეთ ჟეტონი მონაცემთა შესაბამის ტიპზე. მაგალითის გამოყენებით ხაზი 1,"test",3.45 პარსირების კოდი ერთი ხაზისთვის იქნება: char *tok = strtok (buf, ","); row.col1 = atoi (tok); tok = strtok (NULL, ","); row.col2 = tok; tok = strtok (NULL, ","); row.col3 = atof (tok);
გააკეთეთ ეს ყველა ჩანაწერისთვის CSV-ის თითოეულ სტრიქონზე. ფუნქცია "strtok" გააგრძელებს მონაცემების მიწოდებას მძიმით მნიშვნელობებს შორის, სანამ არ ამოიწურება მონაცემები ბუფერში, რა დროსაც ის დააბრუნებს NULL-ს. ეს მიუთითებს, რომ თქვენ დაასრულეთ ხაზი.
გაფრთხილება
ფუნქცია "fopen" შეიძლება დააბრუნოს NULL, თუ იყო შეცდომა - დარწმუნდით, რომ შეამოწმეთ თქვენი ფაილი მის გამოყენებამდე. ზოგიერთ შემთხვევაში, მოწოდებული ნიშნები შეიძლება არ იყოს მოსალოდნელი ფორმატის. დარწმუნდით, რომ შეამოწმეთ თქვენი მონაცემები ბრმად კონვერტაციამდე, შეცდომის საერთო მნიშვნელობების შემოწმებით (ცარიელი სტრიქონი, NULL და ა.შ.).