# GÓC SÁNG TẠO > Khu vực lập trình > Pascal/Delphi/Kylix >  Cách nhập dữ liệu từ File vào mảng 1 chiều [Pascal]

## kiemsl34

Mình có một file "Input.dat" như sau :
4 5 4 3 5
2 3 1 2 4
4 1 2 3 4
6 7 8 2 9
4 3 2 5 6
​Đề yêu cầu là đọc các số trên vào mảng 1 chiều để dùng cho việc tính toán.
<div style="text-align: left">Bro nào rành về File giúp mình với... Ghi code rõ ràng chút cho mình nha, mình mới học Pascal.#-o
​
- Thanks các bro trước -
​
​</div>

----------


## haido92

> Mình có một file "Input.dat" như sau :4 5 4 3 5
> 2 3 1 2 4
> 4 1 2 3 4
> 6 7 8 2 9
> 4 3 2 5 6
> ​Đề yêu cầu là đọc các số trên vào mảng 1 chiều để dùng cho việc tính toán.
> <div style="text-align: left">Bro nào rành về File giúp mình với... Ghi code rõ ràng chút cho mình nha, mình mới học Pascal.#-o
> ​
> - Thanks các bro trước -
> ...


Phần đọc:


```
procedure readfile;
var i:byte;
begin
        assign(f,'Input.dat');reset(f);
        i:=0;
        while not eof(f) do
                begin
                        while not eoln(f) do
                                begin
                                        inc(i);
                                        read(f,a[i]);
                                end;
                        readln(f);
                end;
        n:=i;
        close(f);
end;
```

f: biến tệp
a: mảng một chiều
n: số lượng phần tử

----------


## zincos

*???*

Ủa, dữ lịu trong file input cách nhau bởi 1 dấu cách hết mờ, mình chỉ tăng a_ lên 1 đơn vị lịu có đọc được ko?_

----------


## Nlseo01

> Ủa, dữ lịu trong file input cách nhau bởi 1 dấu cách hết mờ, mình chỉ tăng a_ lên 1 đơn vị lịêu có đọc được ko?_


_
Bạn đọc số thứ nhất trong tệp vào a[0] thì bạn phải lưu số thứ 2 trong tệp vào a[1] chứ. Chính vì vậy mà phải tăng i lên để nó lưu vào mảng a. Bạn cứ yên tâm là máy đọc chính xác, cách 5 - 6 khoảng trống nó vẫn đọc ok!

Chúc bạn học tốt!_

----------


## nhatlinhit88

*Trả lời*




> Phần đọc:
> 
> 
> ```
> procedure readfile;
> var i:byte;
> begin
>         assign(f,'Input.dat');reset(f);
>         i:=0;
> ...


Hình như bị sai rồi, mình đã chạy thử, máy báo lỗi "exitcode = 201".
Bạn xem lại thử xem, mình đã điền thêm phần thân vào, như thế này:


```
uses crt;
var a:array[1..20] of integer; c:byte;
procedure readfile;
var i:byte;f: text;
begin
        assign(f,'Input.dat');reset(f);
        i:=0;
        while not eof(f) do
                begin
                        while not eoln(f) do
                                begin
                                        inc(i);
                                        read(f,a[i]);
                                end;
                        readln(f);
                end;
        close(f);
end;
    begin readfile;
    for c:=0 to 20 do write(a[c]:3);
    readln;
    end.
```

mình thêm vào phần cho nó hiện dữ liệu đã đọc ra, nhưng bị lỗi... Chả biết nữa, mình ko rành về đọc và ghi dữ lịu vào tệp.[IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG][IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG][IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]. bó tay ba zụ này![IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]

----------


## doken

Thực ra thì không cần đến "while not eoln(f) do" cũng được. Chỉ cần 1 vòng "while not eof(f) do" là nó đã dư sức đọc rồi. Bởi vì đọc hết hàng nó sẽ tự động xuống (đk ràng buộc của nó là *eof(f)* nên nó sẽ tự động nhảy).


```
uses crt; 
var a:array[1..50] of integer; c:byte; 

procedure readfile; 
var i:byte;f: text; 
begin         
   assign(f,'Input.dat');
   reset(f);         
   i:=0;         
   while not eof(f) do         
   begin            
      inc(i);            
      read(f,a[i]);         
   end;         
   close(f); 
end; 

BEGIN
   readfile;    
   for c:=1 to 20 do write(a[c]:3);    
   readln 
END.
```

----------


## nguyenvinh16121993

*Trả lời*

À thì ra mình sai chỗ c:=0 to 20 [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG], he he c là kiểu byte.
Hèn gì cứ báo lỗi hoài!
=))=))

----------


## Binhboong92

^^!. Thanks các bác nhiều lắm vì đã chỉ dẫn cho em. Nhưng còn 1 vấn đề này nữa mong các bác giúp nốt,....... Em hoàn thành đoạn mã này rồi nhưng khi cho chạy thì màn hình nó ra như vầy....



> 4 5 4 3 52 3 1 2 4
> ​4 1 2 3 4
> ​6 7 8 2 9
> ​4 3 2 5 6
> ​


Dòng đầu bị thụt vào trong, có cách nào khắc phục không? Em dùng Turbo Pascal 7.0.



> program Trial;
> uses crt;
> var f:text; i,j:integer; a:array[1..20] of integer;
> procedure readfile;
> begin
> assign(f,'Input.txt');
> reset(f);
> i:=0;
> while not eof(f) do
> ...

----------


## otootin

> À thì ra mình sai chỗ c:=0 to 20 [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG], he he c là kiểu byte.
> Hèn gì cứ báo lỗi hoài!
> =))=))


Bạn biết sao nó báo lỗi không! Tại vì bạn khai báo mảng a chỉ 20 phần tử mà bạn cho chạy tới 21 nên nó báo là đúng. (vì chạy từ 0)

----------


## chotoidi

> ^^!. Thanks các bác nhiều lắm vì đã chỉ dẫn cho em. Nhưng còn 1 vấn đề này nữa mong các bác giúp nốt,....... Em hoàn thành đoạn mã này rồi nhưng khi cho chạy thì màn hình nó ra như vầy....
> Dòng đầu bị thụt vào trong, có cách nào khắc phục không? Em dùng Turbo Pascal 7.0.


Để cho bạn hiểu thấu đáo thì mình khuyên bạn nên nói lên ý tưởng cúa bạn trong đoạn code trên. Sau đó mình có lời giải thích và chỉnh sửa sau.

----------


## inhongdang

Mình muốn nhập dữ liệu từ file. Rồi xuất ra màn hình Dos một ma trân y hệt như trong file. Giúp mình nhá........[IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]

----------


## chuvanduyhn91

> Mình muốn nhập dữ liệu từ file. Rồi xuất ra màn hình Dos một ma trân y hệt như trong file. Giúp mình nhá........[IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]


Bạn nêu cả giới hạn ma trận cho mình biết với nào.
Không có giới hạn thì code cỡ nào cũng có test bị exitcode 201 [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]

----------


## huylevans

Giới hạn như trong file đó bạn. Ma trận max là 5x5.

----------


## tindaica

> Giới hạn như trong file đó bạn. Ma trận max là 5x5.


Max là ma trận 5x5 thì phải khai báo mảng một chiều ít nhất 25 phần tử chứ bạn [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]

----------

