Я подозреваю что такой скрипт сильно кривой для этой задачи, но как его написать по другому не додумался.
Итак Т3, у нас есть файл таблиц в csv формате, нужно его вывести в массив two[][],
для дальнейшей работы с ним.
Сам скрипт выкладываю здесь и архивом вместе с самим файлом.(для просмотра ссылки Вам необходимо авторизоваться) P.S. В киборе скрипт видно лучше чем на форуме T_T
P.S.S. И еще 2 вопроса.
1.Как мне обнулить массив полностью? Или дать всем ячейкам в массиве значение x?
2.Как выбросить из памяти ненужный массив?
CODE:
external(INT, "MoveFile", "MoveFileA", "kernel32.dll");
MoveFile("C:\data.csv", "C:\data.txt");//База в csv формате, поэтому просто меняем на txt
string path="C:\data.txt"; // Вписываем путь к файлу
string one[52]; //Первый массив, должен быть n+1 кол-ва строк.
int i=0;//счетчик для первого цикла
if(fopen(path, "r")!=0) // Если открыл
{
while (freadline(one[i])!=0) // Читает строку, и закидывает в массив one[]
{
i++;//увеличиваем счетчик
}
fclose(); // закрывает файл
}
//Для проверки работы раскомментировать.
//messagebox(one[0]);
//messagebox(one[1]);
//messagebox(one[50]);
//messagebox(one[51]);
/*
По итогу получаем массив one[], заполненный строками вида
"Name","Rarity","Faction","Category","Type","Popularity","Sell Price","Sell Offers","Buy Price","Buy Orders","Margin","Last Update"
Всего 51 строка и последняя ячейка пустая
Дальше нам нужно, создать массив two[][], и закинуть в него содержимое этих строк, в итоге должен получиться массив вида:
"Name" "Rarity" "Faction" "Category"
"AC43 Rapier" "Rare" "Engineers" "Weapons"
"Synthesis" "Rare" "Dawn's Children" "Weapons"
"AT Wasp" "Rare" "Lunatics" "Weapons"
есть разделитель ","
*/
char a[500]; /* Обьявляем массив char а[], для того что бы, затем посимвольно записать в него строку из массива one[]
Так как мы не знаем сколько будет символов в строке, зарезервируем 500 ячеек*/
char b[30]; /*Вспомогательный массив char, в него будем записывать все что было до разделителя, а потом из него
закидывать строку в 2 массив в нужную ячейку.
Так же берем с запасом так как мы не знаем сколько будет символов с слове */
int n=0; //Счетчик строки и кол-ва итераций пройденых основным циклом.
int j=0; //Счетчик столбца для 2 массива two[][]
int k=0; //Счетчик символа в строке
string two[53][13];//2 окончательный массив, по идее должен иметь 52, строки и 12 столбцов, но на всякий случай добавим +1
//Первый цикл, каждую строку из массива one[], перебирает посимвольно и закидывает во временный массив a[]
while (#one[n]!="") //пока массив one[] не закончился
{
strcpy(#a[0], one[0]);//закидвыаем строку в массив a[]
//в конце цикла после всех операций, должен увеличить счетчик строки, и обнулить счетчик столбца
/*
Теперь в char массиве a[], у нас та же строка вида
"Name","Rarity","Faction","Category","Type","Popularity","Sell Price","Sell Offers","Buy Price","Buy Orders","Margin","Last Update"
Но теперь в каждой ячейке массива, отдельный символ, и теперь эту строку мы можем разделить.
*/
/*
2 цикл, должен посимвольно перебирать char массив a[], и копировать каждый сивмвол во вспомогательный char массив b[],
Как только наткнеться на разделитель должен брать char масиив b[] и перекидывать получившуюся строку
в наш массив two[n][j], где n это номер строки, а j номер столбца.
*/
while (#a[k]!="") //пока char массив a[] не закончился
{
if a[k]!="," // Если в ячейке НЕ разделитель
{
b[k]=a[k]; // То мы копируем этот символ во второй char массив b[]
k++; // И идем к следующему символу
}
else // Иначе, если мы наткнулись на разделитель
{
two[n][j]=format(#b[0]); //Записываем в наш окончательный массив two[][], строку из char массива b[]
k++; /*Увеличиваем счетчик символа, потому что сам разделитель нам не нужен,
и переходим к следующему символу в массиве a[] */
j++; //увеличиваем счетчик, столбца в массиве two[][]
/*По идее в этом участке кода, нужно так же обнулить все значения char массива b[],
Потому что иначе, если предыдущая позиция была больше чем новая, вылезет такой баг:
Например: "Category" запишеться нормально, а вместо "Type", мы получим - "Type"ory"
*/
} //Закрываем условие if
} //Закрываем 2 цикл
n++; //увеличиваем счетчик строки
j=0; //обнуляем счетчик столбаца после 1 цикла
} //конец 1 цикла
/*
Теперь по идее должны получить массив two[][], вида:
"Name" "Rarity" "Faction" "Category"
"AC43 Rapier" "Rare" "Engineers" "Weapons"
"Synthesis" "Rare" "Dawn's Children" "Weapons"
"AT Wasp" "Rare" "Lunatics" "Weapons"
*/
messagebox(two[1][1]); // должен вывести строку "Rare"
messagebox(two[2][2]); // "Dawn's Children"
/// Но не выводит :D, где ошибся нифига не понимаю
MoveFile("C:\data.csv", "C:\data.txt");//База в csv формате, поэтому просто меняем на txt
string path="C:\data.txt"; // Вписываем путь к файлу
string one[52]; //Первый массив, должен быть n+1 кол-ва строк.
int i=0;//счетчик для первого цикла
if(fopen(path, "r")!=0) // Если открыл
{
while (freadline(one[i])!=0) // Читает строку, и закидывает в массив one[]
{
i++;//увеличиваем счетчик
}
fclose(); // закрывает файл
}
//Для проверки работы раскомментировать.
//messagebox(one[0]);
//messagebox(one[1]);
//messagebox(one[50]);
//messagebox(one[51]);
/*
По итогу получаем массив one[], заполненный строками вида
"Name","Rarity","Faction","Category","Type","Popularity","Sell Price","Sell Offers","Buy Price","Buy Orders","Margin","Last Update"
Всего 51 строка и последняя ячейка пустая
Дальше нам нужно, создать массив two[][], и закинуть в него содержимое этих строк, в итоге должен получиться массив вида:
"Name" "Rarity" "Faction" "Category"
"AC43 Rapier" "Rare" "Engineers" "Weapons"
"Synthesis" "Rare" "Dawn's Children" "Weapons"
"AT Wasp" "Rare" "Lunatics" "Weapons"
есть разделитель ","
*/
char a[500]; /* Обьявляем массив char а[], для того что бы, затем посимвольно записать в него строку из массива one[]
Так как мы не знаем сколько будет символов в строке, зарезервируем 500 ячеек*/
char b[30]; /*Вспомогательный массив char, в него будем записывать все что было до разделителя, а потом из него
закидывать строку в 2 массив в нужную ячейку.
Так же берем с запасом так как мы не знаем сколько будет символов с слове */
int n=0; //Счетчик строки и кол-ва итераций пройденых основным циклом.
int j=0; //Счетчик столбца для 2 массива two[][]
int k=0; //Счетчик символа в строке
string two[53][13];//2 окончательный массив, по идее должен иметь 52, строки и 12 столбцов, но на всякий случай добавим +1
//Первый цикл, каждую строку из массива one[], перебирает посимвольно и закидывает во временный массив a[]
while (#one[n]!="") //пока массив one[] не закончился
{
strcpy(#a[0], one[0]);//закидвыаем строку в массив a[]
//в конце цикла после всех операций, должен увеличить счетчик строки, и обнулить счетчик столбца
/*
Теперь в char массиве a[], у нас та же строка вида
"Name","Rarity","Faction","Category","Type","Popularity","Sell Price","Sell Offers","Buy Price","Buy Orders","Margin","Last Update"
Но теперь в каждой ячейке массива, отдельный символ, и теперь эту строку мы можем разделить.
*/
/*
2 цикл, должен посимвольно перебирать char массив a[], и копировать каждый сивмвол во вспомогательный char массив b[],
Как только наткнеться на разделитель должен брать char масиив b[] и перекидывать получившуюся строку
в наш массив two[n][j], где n это номер строки, а j номер столбца.
*/
while (#a[k]!="") //пока char массив a[] не закончился
{
if a[k]!="," // Если в ячейке НЕ разделитель
{
b[k]=a[k]; // То мы копируем этот символ во второй char массив b[]
k++; // И идем к следующему символу
}
else // Иначе, если мы наткнулись на разделитель
{
two[n][j]=format(#b[0]); //Записываем в наш окончательный массив two[][], строку из char массива b[]
k++; /*Увеличиваем счетчик символа, потому что сам разделитель нам не нужен,
и переходим к следующему символу в массиве a[] */
j++; //увеличиваем счетчик, столбца в массиве two[][]
/*По идее в этом участке кода, нужно так же обнулить все значения char массива b[],
Потому что иначе, если предыдущая позиция была больше чем новая, вылезет такой баг:
Например: "Category" запишеться нормально, а вместо "Type", мы получим - "Type"ory"
*/
} //Закрываем условие if
} //Закрываем 2 цикл
n++; //увеличиваем счетчик строки
j=0; //обнуляем счетчик столбаца после 1 цикла
} //конец 1 цикла
/*
Теперь по идее должны получить массив two[][], вида:
"Name" "Rarity" "Faction" "Category"
"AC43 Rapier" "Rare" "Engineers" "Weapons"
"Synthesis" "Rare" "Dawn's Children" "Weapons"
"AT Wasp" "Rare" "Lunatics" "Weapons"
*/
messagebox(two[1][1]); // должен вывести строку "Rare"
messagebox(two[2][2]); // "Dawn's Children"
/// Но не выводит :D, где ошибся нифига не понимаю