Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/30: Рейтинг темы: голосов - 30, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 20.10.2010
Сообщений: 61

Разделить строку данных на отдельные числа

05.02.2011, 21:11. Показов 5716. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Народ, подскажите, пожалуйста, как мне реализовать заполнение данных из txt фаила в SrtingGrid.
Фаил заполнен так:
2 3 4
5 6 7
.....
Когда я пытаюсь подгрузить такой фаил, то у меня заполняется первый столбец данными всей строки, а мне надо чтобы каждое число в своей ячейке было. Что нужно поменять?
Delphi
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
//DownLoad the file
procedure TForm1.Button2Click(Sender: TObject);
 
  var
  i,j,m,n:integer;
  s:string;
  input:TextFile;
 
begin
 
if OpenDialog1.Execute then
      begin
 
    AssignFile(input, OpenDialog1.FileName);
    Reset(input);
  
     m:=strtoint(Edit1.Text);
     n:=strtoint(Edit2.Text);
 
    for i := 0 to m - 1 do
    begin
       for j := 0 to n - 1 do
       begin
         Readln(input, s);
         StringGrid1.Cells[i,j] := s;
       end;
       Readln(input);
    end;
       CloseFile(input);
  end;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.02.2011, 21:11
Ответы с готовыми решениями:

Как разделить строку на отдельные элементы?
Как можно из строковой переменной, где значения записаны так: (11, 44, 1, 24, и т. д.), получить каждое кисло в отдельной ячейке массива???

Разделить строку на отдельные слова не используя стандартные средства для разбиения строк
Дана строка S. Разделить строку на отдельные слова не используя стандартные средства для разбиения строк. Программа есть но сказали...

Дана строка S. Разделить строку на отдельные слова не используя стандартные средства для разбиения строк
class Program { static void enter( out char chars) { string str = Console.ReadLine() ; chars = str.ToCharArray(); } static...

6
731 / 407 / 95
Регистрация: 19.12.2010
Сообщений: 756
05.02.2011, 22:14
Juggle, замени строку s:string; на s:integer; для чтения не символов а чисел.
Readln(input, s); замени на Read(input, s); для чтения по одному числу, а не всей строки.
1
1 / 1 / 0
Регистрация: 20.10.2010
Сообщений: 61
05.02.2011, 22:38  [ТС]
Все заменено, + StringGrid1.Cells[j,i] := IntToStr(s), а то ругался,
но появилась другая проблема: при считывании происходит отображение цифр одной за другой без учета заданного количества строк в гриде, т.е. если у меня грид 2х2, то данные будут:
2 3 а надо 2 3 (исходный txt фаил: 2 3 4)
4 5______ 5 6___________________5 6 7
как с этим бороться?
0
731 / 407 / 95
Регистрация: 19.12.2010
Сообщений: 756
05.02.2011, 23:26
Juggle,перед переносом файла в stringgrid нужно определять количество строк и столбцов в файле. Потом программно менять количество строк и столбцов в stringgrid.
1
1 / 1 / 0
Регистрация: 20.10.2010
Сообщений: 61
06.02.2011, 15:53  [ТС]
19vitek, у меня скорее обратная задача: я задаю количество строк и столбцов через ГУИ (Edit) для StringGrid и ожидается что с фаила будет считываться столько строк и столбцов, сколько пользователь указал.

Добавлено через 16 часов 5 минут
Ну же, товарищи, я ведь знаю что задача не сложная для тех, кто разбирается в Делфи. Поделитесь знаниями.
0
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
07.02.2011, 02:51
Juggle,
Такой вариант:
Delphi
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
34
var
 Tstr,TstrBuff:TStringList;
 i,j:Integer;
begin
 
if OpenDialog1.Execute then
Begin
TstrBuff:= TStringList.Create;
TstrBuff.Delimiter:=' ';
 
Tstr:= TStringList.Create;
Tstr.LoadFromFile(OpenDialog1.FileName);
 
StringGrid1.RowCount:= Tstr.Count+1; // задаем количество строк в таблице
 
for i:=0 to Tstr.Count-1 do
 begin
 // определяем, нужно ли расширить таблицу (ведь бывают случаи, когда в файле с данными, строки имеют не одинаковое кол-во элементов )
 TstrBuff.DelimitedText:=Tstr.Strings[i];
 if TstrBuff.Count> StringGrid1.ColCount-1 then  StringGrid1.ColCount:=TstrBuff.Count+1;
 
 // заполняем очередную строку таблицы соответствующими данными
 StringGrid1.Rows[i+1].Delimiter:=' ';
 StringGrid1.Rows[i+1].DelimitedText:= Tstr.Strings[i];
  // смещаем строку на одну колонку правее, иначе строка будет заполнена с первой ячейки, а там обычно место для заголовка
  for j:=StringGrid1.ColCount downto 0 do
   StringGrid1.Cells[j+1,i+1]:=StringGrid1.Cells[j,i+1];
   StringGrid1.Cells[0,i+1]:='';
 end;
Tstr.Free;
TstrBuff.Free;
end;
 
end;
Идея такова:
1. При помощи Delimiter задаем, на какой знак будем ориентироваться при разбивке текста на составляющие. В нашем случае это пробел.

2. При помощи DelimitedText будем записывать текст с разбивкой, исходя из заданного Delimiter .

3. В данном примере размеры таблицы устанавливаются автоматически.

4. Вводить можно матрицу, содержащую в строках разное кол-во элементов.
Например
2 3 4
5 6 7 8
9

5. Заголовки таблицы заполняй после заполнения основными данными. По крайней мере заголовки строк


Тестируй.



Добавлено через 36 минут
Juggle,
Пардон. Просмотрел это сообщение

Цитата Сообщение от Juggle Посмотреть сообщение
19vitek, у меня скорее обратная задача: я задаю количество строк и столбцов через ГУИ (Edit) для StringGrid и ожидается что с фаила будет считываться столько строк и столбцов, сколько пользователь указал.
Могу предложить такие решения:
1. Загрузить весь файл в таблицу, и затем уничтожить не нужное. Останется только указанный диапазон.

2. Видимо, более предпочтительный.
На форму кинуть еще один StringGrid, и уже в него, из основного, копировать заданный диапазон строк и столбцов. StringGrid1 можно сделать не видимым на форме командой StringGrid1.Hide

Можно конечно перелопачивать и сам файл по заданным условиям, но это сложнее, как мне кажется. Есть ли смысл?
1
1 / 1 / 0
Регистрация: 20.10.2010
Сообщений: 61
07.02.2011, 23:01  [ТС]
Евгений В, спасибо за развернутый ответ
Я разобралась с задачкой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2011, 23:01
Помогаю со студенческими работами здесь

Введенную строку разбить на отдельные числа
Надо вводимую строку разбить на отдельные числа по пробелам и записать в массив.Пример: char string1; cin.getline(string1, 128); Пример...

Преобразовать строку, разделить числа
Преобразовать строку - преобразовал, но уверен, что можно улучшить скорость выполнения программы. Важна производительность. Вот примеры...

Разделить столбец на два с переносом данных в одну строку!
Помогите!!!! Есть таблица, с данными о прививках. Данные сгруппированы в одном столбце. Надо разбить данные на два столбца, но в одну...

Разделить ячейку на две отдельные ячейки
Нужно разделить ячейку на две части, чтобы при нажатии на одну часть происходило одно действие, а на другую часть - другое действие....

Разделить массив на отдельные строки и вывести их поочерёдно в MessageBox
Помогите пожалуйста. Вроде как всё просто, но уже пол часа ничего не выходит.:wall: Нужно сделать следующее: Дан массив строк,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru