Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 43

Чтение из файла в массив

21.05.2016, 21:53. Показов 3231. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, есть файл.тхт следующего содержания:

2405 UT2321 TSK 1262 PIN 1220
2505 UT2221 TSK 1232 PIN 1120
2605 UT2311 TSK 1272 PIN 1420
2705 UT2321 TSK 1522 PIN 1620
2805 UT1321 TSK 1222 PIN 1420

Вопрос: как считать его в двумерный массив? И какой тип переменных массива должен получиться? Я так понимаю это будет char?

Т.е. например при запросе элемента массива massiv[0][0] должно выдать 2405.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.05.2016, 21:53
Ответы с готовыми решениями:

Чтение из файла в массив
Здравствуйте! Есть файл такого содержания: Нужно его прочесть так чтобы было два массива: arr1 3|6|1|6 arr2 2|5|2|7 Заранее...

Чтение из файла в массив
Подскажите пожалуйста, почему не считывается текст из файла в массив? using (StreamReader sr = new StreamReader("theoria.txt",...

Чтение из файла в массив
ДОбрый день, подскажите пожалуйста как из .txt файла в котором куча всего фвававыфпфвып time=XXms adkgjdlskgj;ag ...

8
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
22.05.2016, 01:11
Можно использовать строковый массив-таблицу (TStringGrid), поскольку содержимое файла смешанное. Например, таким образом__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
     TStringGrid *gri ;
void __fastcall TForm1::Button2Click(TObject *Sender)
{        //  #include  stdio.h
     if(!gri) gri = new TStringGrid(this);
     gri->ColCount = 6;  gri->RowCount = 1;
     int cnt = -1;
     FILE *F ;
     F = fopen("файл.txt","r");
     while ( !feof(F) )  {
      char buf[99] = {0} ;
      fgets(buf,99,F);
      gri->Rows[++cnt]->CommaText = (String)buf;
      gri->RowCount = cnt+1;
     }
     fclose(F);
     Caption = gri->Cells[0][0];
}
1
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 43
22.05.2016, 09:13  [ТС]
А как потом считать допустим первый элемент второй строки?

Добавлено через 14 минут
Размещаю Button1 и TStringGrid на форме. Файл 1.txt лежит в папке с проектом сохраненным. При нажатии на кнопку таблица не заполняется и ничего вообще не происходит. Что я делаю не так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <vcl.h>
#include "stdio.h"
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
TStringGrid *gri ;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(!gri) gri = new TStringGrid(this);
     gri->ColCount = 6;  gri->RowCount = 1;
     int cnt = -1;
     FILE *F ;
     F = fopen("1.txt","r");
     while ( !feof(F) )  {
      char buf[99] = {0} ;
      fgets(buf,99,F);
      gri->Rows[++cnt]->CommaText = (String)buf;
      gri->RowCount = cnt+1;
     }
     fclose(F);
     Caption = gri->Cells[0][0];
}
Добавлено через 17 минут
Кажется разобрался! В данном примере Caption формы присваивается первое значение! Отлично!
0
Модератор
 Аватар для D1973
9906 / 6443 / 2455
Регистрация: 21.01.2014
Сообщений: 27,351
Записей в блоге: 3
22.05.2016, 09:17
Я бы так как-то сделал...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void __fastcall TForm1::btn_ReadClick(TObject *Sender)
{
  TStringList *L = new TStringList; //создали стринглист
  String fName = "c:\\tmp\\111.txt"; //Задали имя файла
  if(!FileExists(fName))         //Если файла нет - сообщаем и выходим
   {
     ShowMessage("Отсутствует файл для чтения");
     return;
   }
  L->LoadFromFile(fName); //Загрузили файл в стринглист
  TStringList *Tmp = new TStringList; //создали вспомогательный стринглист
  Tmp->CommaText = L->Strings[0]; //загрузили в него строку из основного стринглиста
  StringGrid1->RowCount = L->Count; //Задали кол-во строк таблицы
  se_R->MaxValue = StringGrid1->RowCount; //задали максимальное значение для СпинЭдита строк
  StringGrid1->ColCount = Tmp->Count; //Задали кол-во столбцов таблицы
  se_C->MaxValue = StringGrid1->ColCount;  //задали максимальное значение для СпинЭдита столбцов
  delete Tmp; //удалили вспомогательный стринглист
  for(int i = 0; i < L->Count; i++)
   StringGrid1->Rows[i]->CommaText = L->Strings[i]; //Заполнили таблицу
  //Разблокировали недоступные компоненты для выбора элемента
  for(int i = 0; i < ControlCount; i++)
   if(Controls[i]->Tag == 1) Controls[i]->Enabled = true;
  delete L; //удалили стринглист
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn_GetClick(TObject *Sender)
{
  ShowMessage(StringGrid1->Cells[se_C->Value - 1][se_R->Value - 1]);
}
//---------------------------------------------------------------------------
Миниатюры
Чтение из файла в массив  
1
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 43
22.05.2016, 09:28  [ТС]
Спасибо за пример, хочется уточнить, что в Вашем примере, что в предыдущем - количество строк в создаваемой таблице всегда == количеству строк файла?
И с чем связано char buf[99], почему именно 99? Правильно ли я понимаю, что в каждом элементе массива char хранится один символ из строки файла? И если у меня строка допустим будет из 20 символов, то buf[20] хватит для этого?
0
Модератор
 Аватар для D1973
9906 / 6443 / 2455
Регистрация: 21.01.2014
Сообщений: 27,351
Записей в блоге: 3
22.05.2016, 09:57
Цитата Сообщение от gb_ Посмотреть сообщение
количество строк в создаваемой таблице всегда == количеству строк файла?
А как иначе-то? И вообще не помешает проверку сделать на наличие пустых строк...
вот так, к примеру, можно удалить пустые строки до и после текста...
C++
1
2
L->LoadFromFile(fName); //Загрузили файл в стринглист
L->Text = L->Text.Trim(); //<<==
Добавлено через 2 минуты
А вообще-то, при желании можно таблицу составить из произвольного количества строк: как из диапазона, так и исходя из какого-то определенного критерия...
0
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 43
22.05.2016, 10:18  [ТС]
А как сделать сравнение ячейки с каким то значением? Делаю так:

C++
1
2
3
int b = 24;
if (gri->Cells[0][0] == b)
int a = a + 1;
Полагаю что int - не верный выбор, тогда как правильно сравнить содержимое ячейки с 24? Как понимаю - в ячейках строки?
0
Модератор
 Аватар для D1973
9906 / 6443 / 2455
Регистрация: 21.01.2014
Сообщений: 27,351
Записей в блоге: 3
22.05.2016, 10:42
C++
1
2
3
int b = 24;
if (StrToInt(gri->Cells[0][0]) == b)
int a = a + 1;
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33193 / 21489 / 8233
Регистрация: 22.10.2011
Сообщений: 36,876
Записей в блоге: 12
22.05.2016, 12:11
gb_, небольшое шаманство со стандартным TStringList, и он превращается... превращается TStringList... в двумерное невизуальное хранилище строк:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class TTableStringList : public Classes::TStringList
{
    UnicodeString __fastcall GetData(int ARow, int ACol)
    // Внимание: в отличие от TStringGrid-а, тут используется привычная индексация [Строка][Столбец] !!!
    // Еще можно проверить наличие строки ARow в списке, по хорошему, но мне - лень
    {
        TStringList *lst = static_cast<TStringList*>(Objects[ARow]); // просто получаем объект, соответствующей строки
        if(lst && lst->Count > ACol) return lst->Strings[ACol]; // и, если там есть столько слов, возвращаем нужное
        else return ""; // иначе возвращаем пустую строку, как признак отсутствия данных
    }
public:
    __fastcall TTableStringList(void)
    {
        OwnsObjects = true; // чтобы при удалении все объекты самоликвидировались
    }
    virtual int __fastcall Add(const UnicodeString S)
    // каждое добавление строки в список вызывает эту процедуру. Будь то при чтении файла,
    // или при ручном заполнении, или при копировании одного StringList-а в другой
    {
        int Result = Classes::TStringList::AddObject(S, new TStringList); // просто создаем для каждой строки объект
        static_cast<TStringList*>(Objects[Result])->DelimitedText = S; // в который записываем все слова строки
        return Result; // и возвращаем индекс созданного объекта
    }
    __property UnicodeString Data[int ACol][int ARow] = {read=GetData}; // теперь через свойство Data можно работать с матрицей
};
 
void __fastcall TForm1::Button4Click(TObject *Sender)
{
    std::auto_ptr<TTableStringList> L(new TTableStringList);
    L->StrictDelimiter = true;
    L->LoadFromFile("D:\\test\\myf.txt");
    ShowMessage(L->Data[1][3]); // для приведенного выше примера файла будет выведено 1232
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.05.2016, 12:11
Помогаю со студенческими работами здесь

Чтение файла в массив
Здравствуйте. Задача такова что нужно прочитать русский текст из файла и записать его посимвольно в массив, убирая при этом знаки...

Чтение из файла в массив
Нужно прочитать файл, в нем несколько целых чисел, разделенных пробелами. Пользователь вводит число, ему выдается индекс вхождений числа....

Чтение из файла в массив
Всем привет! Извините, если такая тема уже поднималась, но я ничего не нашла.... У меня такая задачка. Есть два файлика, в одном матрица...

Чтение из файла в массив
Дан файл, содержащий положительные целые числа. Напишите программу, которая находит в этом файле количество локальных минимумов. Локальным...

Чтение из файла в массив
//--------------------------------------------------------------------------- #include &lt;clx.h&gt; #include &lt;stdio.h&gt; #pragma...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru