PDA

View Full Version : سوال: تبدیل فایل متنی به آرایه



<برنامه نویس>
جمعه 23 مرداد 1388, 01:18 صبح
سلام

میشه بگید چه جوری یکسری اطلاعات که به این شکل داخل یک فایل txt ریخته شده رو میتونیم به آرایه تبدیل کنیم که تو برنامه ازش استفاده کنید



ali,123,nima,321,naeim,7657,mostafa,43245

حالا من میخوام اینجوری بشه


a[1]=ali
a[2]=123
a[3]=nima
a[4]=321


مرسی

Saeed_m_Farid
جمعه 23 مرداد 1388, 14:15 عصر
سلام
میشه بگید چه جوری یکسری اطلاعات که به این شکل داخل یک فایل txt ریخته شده رو میتونیم به آرایه تبدیل کنیم که تو برنامه ازش استفاده کنید

سلام، مي دونم اينجور جواب دادن (لقمه آماده) درست نيست.
ولي خواستم يه تمريني واسه خودم كرده باشم! دوستان اگه ايرادي (حتي جزئي -مثلاً تو بافرها و ... ) مي بينن بفرمايند تا من ببينم چقدر C يادم مونده! ممنون :


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


/************************************************/

#define MAX_NAMES 1000
#define MAX_FILE_PATH 260
#define MAX_NAME_LENGTH 256
char* g_Names [MAX_NAMES];

/************************************************/

int loadNames(char* TheFile
,char delimiter)
{
int cnt = 0;
FILE* pSearchFile = NULL;
char c[2] = "\0",
pCurStr[MAX_NAME_LENGTH];

cnt = 0;
strcpy(pCurStr, "");
if (pSearchFile = fopen(TheFile, "r"))
{
while ((c[0]=getc(pSearchFile) )!= EOF)
{
c[1] = '\0';
if((c[0] != 10 ) &&
(c[0] != 13 ) &&
(c[0] != delimiter))
{
strcat(pCurStr, c);
}else
{
strcpy(c, "\0");

if ((g_Names[cnt] = (char *) malloc(strlen(pCurStr)+1)) == NULL)
{
printf("Not enough memory to allocate buffer\n");
exit(1); /* Exit function if out of memory */
}

if (strlen(pCurStr) > 0)
strcpy(g_Names[cnt++], pCurStr);

strcpy(pCurStr, "");
}
}
fclose(pSearchFile);
return cnt;
}else
{
fclose(pSearchFile);
return 0;
}
}

/************************************************/

void main(){
char filePath[MAX_FILE_PATH];
int readedCount, idx = 0;
printf("Please enter file path: ");
scanf("%s", filePath);
readedCount = loadNames(/*"C:\\Test.txt"*/filePath, ',');
if (readedCount > 0)
{
for(idx=0; idx < readedCount; idx++)
printf("Name[%d]=%s\n", idx, g_Names[idx]);
free(g_Names[idx]); // if not used anymore!
}else
printf("Cann't read any name from <%s>!", filePath);
getch();
}

/************************************************/

http://www.mypicx.com/uploadimg/17252891_08142009_1.png

tdkhakpur
جمعه 23 مرداد 1388, 15:51 عصر
سلام
داخل main تکه کد ارسالی بالا را بصورت زیر اصلاح کنید کد بالا قادر به برگرداندن حافظه ای را که از سیستم گرفته است را ندارد.


if (readedCount > 0)
{
for(idx=0; idx < readedCount; idx++)
printf("Name[%d]=%s\n", idx, g_Names[idx]);
free(g_Names[idx]); // if not used anymore!
}else
printf("Cann't read any name from <%s>!", filePath);
// اصلاح به صورت زیر


if (readedCount > 0)
{
for(idx=0; idx < readedCount; idx++) { // اضافه شود
printf("Name[%d]=%s\n", idx, g_Names[idx]);
free(g_Names[idx]); // if not used anymore!
}// اضافه شود
}else
printf("Cann't read any name from <%s>!", filePath);