Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не пишет первое слово [D7, XP]


Tovarisch ©   (2008-03-18 20:49:00) 

Вот такой вот код загоняет в массив из записей
type
Bylet = record
No:string[12];
Reys:string[12];
Data:string[12];
FIO:string
Файлик в котором слова через пробел.
Проблема в том что все No:string[12]; остаются пустыми.
И может заодно скажите как указатель в файле вернуть в начало или методы определения количества строк файла без ридлни счетчика)

procedure TForm1.Button4Click(Sender: TObject);
begin
fname:=Label6.Caption+'\'+Edit6.Text;
AssignFile(f, fname);
Reset(f);

while not EOF(f) do
begin
I:=i+1;
readln(f,s);
end;
SetLength(rec,i);
I:=0;
CloseFile(f);
AssignFile(f, fname);
Reset(f);
while not EOF(f) do
begin
Readln(f,s);
for I := 0 to (length(s)) do
begin
if s[i]<>' ' then
Begin
case j of
0:rec[k].No:=rec[k].No+s[i];
1:rec[k].Reys:=rec[k].Reys+s[i];
2:rec[k].Data:=rec[k].Data+s[i];
3:rec[k].FIO:=rec[k].FIO+s[i];
end
end
else J:=j+1;
end;
k:=k+1;
i:=0;
j:=0;
end;


Галинка   (2008-03-19 17:38:00) [1]

procedure TForm1.Button4Click(Sender: TObject);
var
 maxLength,
 spaceIndex, spacePos : integer;
begin
fname:=Label6.Caption+'\'+Edit6.Text;
maxLength:=0;

AssignFile(f, fname);
Reset(f);

while not EOF(f) do begin
  inc(maxLength);
  SetLength(rec,maxLength);
  spaceIndex = 0;

  Readln(f,s);
  spacePos = Pos(s, " ");
  while (spacePos > 0) do begin
     case spaceIndex of
        0: rec[maxLength-1].No:=Copy(s, 1, spacePos-1);
        1: rec[maxLength-1].Reys:=Copy(s, 1, spacePos-1);
        2: rec[maxLength-1].Data:=Copy(s, 1, spacePos-1);
     end;
     s:=Copy(s, spacePos+1, Length(s)-spacePos);
     inc(spaceIndex);
     spacePos:=Pos(s, " ");
  end;
  rec[maxLength-1].FIO:=Copy(s, 1, Length(s));
 
  memo1.Lines.Add(rec[maxLength-1].No);
  memo1.Lines.Add(rec[maxLength-1].Reys);
  memo1.Lines.Add(rec[maxLength-1].Data);
  memo1.Lines.Add(rec[maxLength-1].FIO);

  buf[0]:='';
  buf[1]:='';
  buf[2]:='';
  buf[3]:='';
end;
end;


что-то вроде такого должно получится.


Галинка   (2008-03-19 16:44:00) [2]

перераспределять память можно непосредственно при заполнении массива. Вообще код смотрится и читается оч. плохо.


Галинка   (2008-03-19 16:30:00) [3]

что мешает использовать функции Pos & Copy


Плохиш   (2008-03-19 12:20:00) [4]


> По дебагу он в rec[k].No запихивает до значения символ #0(#0'121')

#0 - это признак конца строки.


Tovarisch   (2008-03-19 12:05:00) [5]

А после поста палладина ето было что?
rec: array of Bylet;
 buf: array[0..3] of string;
 f: text;
 fname,s,c:string;
 i,j,k:integer;

Файлик текстовый(.txt) сохранен в анси
По дебагу он в rec[k].No запихивает до значения символ #0(#0'121')
В том то и дело не могу понять что ему мешает отобразить хотябы и со всем этим на мемо вот так скажем
procedure TForm1.Button4Click(Sender: TObject);
begin
fname:=Label6.Caption+'\'+Edit6.Text;
AssignFile(f, fname);
Reset(f);

while not EOF(f) do
begin
I:=i+1;
readln(f,s);
end;

SetLength(rec,i);
I:=0;
CloseFile(f);
AssignFile(f, fname);
Reset(f);

while not EOF(f) do
begin
Readln(f,s);
for I := 0 to (length(s)) do
begin
  if s[i]<>' ' then
   Begin
   case j of
   0:rec[k].No:=rec[k].No+s[i];
   1:rec[k].Reys:=rec[k].Reys+s[i];
   2:rec[k].Data:=rec[k].Data+s[i];
   3:rec[k].FIO:=rec[k].FIO+s[i];
   end
   end
  else J:=j+1;
end;

memo1.Lines.Add(rec[k].No);
memo1.Lines.Add(rec[k].Reys);
memo1.Lines.Add(rec[k].Data);
memo1.Lines.Add(rec[k].FIO);
k:=k+1;
i:=0;
j:=0;
buf[0]:='';
buf[1]:='';
buf[2]:='';
buf[3]:='';
end;

получим
uyio
6516
sdgsd при строке 121 uyio 6516 sdgsd


Германн   (2008-03-19 00:29:00) [6]

И в любом случае:
1. Требования Palladin ©   (18.03.08 20:51) [1] до сих пор не удовлетворены. А без этого предметное обсуждение не имеет смысла.
2. Надо твердо определиться. Либо ТП, либо Дельфи. Либо ShortString, либо AnsiString.


antonn   (2008-03-19 00:21:00) [7]

по моему, здесь Tfilestream/Tmemorystream было бы куда удобнее...


Игорь Шевченко   (2008-03-19 00:12:00) [8]

Плохиш ©   (18.03.08 23:08) [3]

Из иерархии пользователей VAX/VMS

"knowledgeable
user
                 - uses RUNOFF with no trouble, and is beginning
                   to learn EVE
                 - uses SEARCH to search for fixed strings
                 - has  figured  out  that  RENAME  will   move
                   directories
                 - has learned that HELP usually help
                 - somebody has shown her how to write C programs
                 - watched somebody use /DEBUG once                 
                 - all UNIX expert looking for VMS make"


Плохиш   (2008-03-18 23:08:00) [9]


> Tovarisch ©   (18.03.08 21:10) [2]

Слово "отладчик" (по буржуински "debug") тебе знакомо?


Tovarisch   (2008-03-18 21:10:00) [10]

1. Компилируется же и работает как нада(конкретно оно)
2. Все как в школе
rec: array of Bylet;
 buf: array[0..3] of string;
 f: text;
 fname,s,c:string;
 i,j,k:integer;


Palladin   (2008-03-18 20:51:00) [11]

1.

type
Bylet = record
No:string[12];
Reys:string[12];
Data:string[12];
FIO:string

это не откомпилируется

2. тип f в студию


> И может заодно скажите как указатель в файле вернуть

seek + F1
можешь возвращать его куда угодно


Наверх

Титульная страница Поиск, карта сайта Написать письмо