Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2011, 13:25   #1
Potemkin_42
 
Регистрация: 09.01.2011
Сообщений: 6
Восклицание Работа с текстовым файлом в Delphi

День добрый!
Помогите кто чем может!
Задача: есть текстовый файл, в котором 2 столбца с цифрами, количество строк не известно. Надо из файла загрузить в два массива, для дальнейшей работы., каждый столбец в отдельный массив.
Пробовал через Memo сделать, но не всегда работает.
Заранее благодарен.

Последний раз редактировалось Potemkin_42; 09.01.2011 в 13:27.
Potemkin_42 вне форума Ответить с цитированием
Старый 09.01.2011, 15:38   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

чем столбцы разделены? столбцы с числами или с цифрами?
если с числами - то в каком формате?
массивы динамические?

а вообще, или TextFile и обычный цикл
while not eof(f) do begin
Readln(f, s);
end;
или TS:=TStringList.Create; TS.LoadFromFile('имяфайл.txt');
и цикл по всем строкам: for i:=0 to TS.Count-1 do
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.01.2011, 07:50   #3
Potemkin_42
 
Регистрация: 09.01.2011
Сообщений: 6
По умолчанию

в файле числа, выглядит примерно так:
1.234 -3.445
2.432 -7.433
3.560 4.231
между столбцами и перед первым столбцом пробелы.
Надо разбить на 2 массива.
Potemkin_42 вне форума Ответить с цитированием
Старый 11.01.2011, 08:43   #4
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var mas1,mas2: array of real;
    SL:TStringList;
    i:integer;
    s:string;
begin
 SL:=TStringList.Create;
 SL.LoadFromFile('d:\1.txt');
 SetLength(mas1,SL.Count);
 SetLength(mas2,SL.Count);
 for i:=0 to SL.Count-1 do
  begin
   s:=StringReplace(SL[i],'.',',',[rfReplaceAll]);
   mas1[i]:=StrToFloat(Copy(s,1,Pos(' ',s)-1));
   mas2[i]:=StrToFloat(Copy(s,Pos(' ',s)+1,Length(s)-Pos(' ',s)));
  end;
 FreeAndNil(SL);
end;

Последний раз редактировалось SERG1980; 11.01.2011 в 10:03.
SERG1980 вне форума Ответить с цитированием
Старый 11.01.2011, 09:47   #5
Potemkin_42
 
Регистрация: 09.01.2011
Сообщений: 6
По умолчанию

попробовал, но чего он ругаться начал: "is not a valid floating point value"
Думал мож разделитель не такой, поменял и все равно вылазиет ошибка.

mas2[i]:=StrToFloat(Copy(SL[i],Pos(' ',SL[i])+1,Length(SL[i])-Pos(' ',SL[i]))); - где здесь ругается

Последний раз редактировалось Potemkin_42; 11.01.2011 в 09:51.
Potemkin_42 вне форума Ответить с цитированием
Старый 11.01.2011, 10:03   #6
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

поправил всё работает
в качестве примера брал
1.234 -3.445
2.432 -7.433
3.560 4.231
SERG1980 вне форума Ответить с цитированием
Старый 11.01.2011, 10:18   #7
Potemkin_42
 
Регистрация: 09.01.2011
Сообщений: 6
По умолчанию

поправил всё работает
в качестве примера брал
1.234 -3.445
2.432 -7.433
3.560 4.231



че-то с пробелами не хочет работать
Potemkin_42 вне форума Ответить с цитированием
Старый 11.01.2011, 11:05   #8
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

А что не работает то, у меня всё работает, можете ваш текстовый файл выложить?
SERG1980 вне форума Ответить с цитированием
Старый 11.01.2011, 11:31   #9
Potemkin_42
 
Регистрация: 09.01.2011
Сообщений: 6
По умолчанию

выложил файл
Вложения
Тип файла: txt Текстовый документ.txt (9.9 Кб, 157 просмотров)
Potemkin_42 вне форума Ответить с цитированием
Старый 11.01.2011, 12:09   #10
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Ну дык правильно в примере указываете одно а в файле другое
Код:
procedure TForm1.Button1Click(Sender: TObject);
var mas1,mas2: array of real;
    SL:TStringList;
    i:integer;
    s:string;
begin
 SL:=TStringList.Create;
 SL.LoadFromFile('d:\1.txt');
 SetLength(mas1,SL.Count);
 SetLength(mas2,SL.Count);
 for i:=0 to SL.Count-1 do
  begin
   s:=StringReplace(SL[i],'.',',',[rfReplaceAll]);
   s:=TrimLeft(s);
   mas1[i]:=StrToFloat(Copy(s,1,Pos(' ',s)-1));
   mas2[i]:=StrToFloat(Copy(s,Pos(' ',s)+1,Length(s)-Pos(' ',s)));
  end;
 FreeAndNil(SL);
end;

Последний раз редактировалось SERG1980; 11.01.2011 в 12:23.
SERG1980 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с текстовым файлом bles Паскаль, Turbo Pascal, PascalABC.NET 3 18.04.2010 01:09
Работа с текстовым файлом Vasya Помощь студентам 28 24.01.2008 01:15
Работа с текстовым файлом (delphi). Помогите доделать программу. Snord Помощь студентам 1 14.12.2007 14:10