Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Formiranje ispravnog redosleda redova u datoteci!

[es] :: Pascal / Delphi / Kylix :: Formiranje ispravnog redosleda redova u datoteci!

[ Pregleda: 2043 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

del-boy
Bojan Delić
Beograd

Član broj: 9330
Poruke: 1089

Sajt: www.delic.in.rs


+21 Profil

icon Formiranje ispravnog redosleda redova u datoteci!24.09.2004. u 19:55 - pre 238 meseci
Imam jedan problem koji sa svojim znanjem iz Pascala ne mogu sam da rešim. Probelem je sledeći: treba poredati sve redove u datoteci po slovima sa početka reda! rezultat može biti ispisan u drugoj datoteci. Ovo su ulazni podaci:

"77", 16972.832,-144553.723, 84.180
"78", 16970.488,-144554.895, 84.000
"79", 16938.056,-144553.331, 84.130
"80", 16913.432,-144551.937, 83.290
"81", 16913.468,-144551.948, 84.080
"82b", 16913.438,-144551.426, 84.090
"P40", 17354.000,-144487.960, 0.000
"P41", 17426.580,-144498.590, 0.000
"R10", 17076.786,-144602.194, 0.000
"R11B", 17081.299,-144602.159, 0.000
"R12", 17071.727,-144641.108, 0.000
"R13B", 17069.765,-144690.576, 0.000
"z239", 17225.700,-145098.900, 0.000
"s1", 17962.957,-145132.210, 0.000
"s2", 17942.480,-145134.153, 0.000
"s15", 17863.610,-145146.900, 0.000
"s16", 17863.430,-145145.900, 0.000
"s17", 17854.860,-145148.800, 0.000
"s18", 17854.650,-145147.700, 0.000
"s19", 17852.810,-145149.400, 0.000
"s20", 17840.250,-145151.900, 0.000
"s21", 17839.850,-145149.900, 0.000
"s22", 17832.420,-145153.700, 0.000
"s23", 17832.020,-145151.700, 0.000
"oa2", 17448.171,-144505.899, 0.000
"oa3", 17434.299,-144503.502, 0.000
"oa4", 17422.869,-144500.401, 0.000
"oa5", 17420.381,-144500.900, 0.000
"ao6", 17411.438,-144498.999, 0.000
"ao7", 17402.002,-144498.101, 0.000
"ao8", 17386.692,-144495.101, 0.000
"ao9", 17381.361,-144494.498, 0.000
"ao10", 17377.901,-144493.402, 0.000
"ao11", 17467.948,-144509.998, 0.000
"ao12", 17483.180,-144515.200, 0.000
"ao13", 17490.218,-144518.102, 0.000
"ao14", 17495.499,-144519.503, 0.000
"ao15", 17503.468,-144520.800, 0.000
"ao16", 17504.330,-144518.300, 0.000
"ao17", 17513.150,-144521.401, 0.000
"ao18", 17516.860,-144523.199, 0.000
"ao19", 17519.371,-144524.102, 0.000
"2098", 16502.100,-144957.000, 0.000
"2099", 16502.890,-144957.200, 0.000
"2100", 16502.640,-144958.200, 0.000
"2101", 16505.830,-144958.100, 0.000
"2102", 16505.400,-144959.200, 0.000
"2103", 16514.300,-144960.200, 0.000
"2105", 16521.310,-144961.800, 0.000
"2106", 16526.740,-144963.100, 0.000
"2108", 16529.970,-144963.900, 0.000
"2110", 16545.520,-144967.500, 0.000
"2112", 16556.480,-144970.200, 0.000
"2113", 16555.750,-144973.200, 0.000
"2114", 16554.170,-144972.800, 0.000
"2115", 16561.280,-144971.600, 0.000
"2117", 16569.000,-144973.200, 0.000
"2118", 16568.760,-144974.200, 0.000
"2119", 16579.890,-144975.900, 0.000
"2120", 16579.650,-144976.800, 0.000
"2121", 16585.720,-144977.400, 0.000
"2122", 16585.480,-144978.300, 0.000
"2123", 16595.900,-144979.800, 0.000
"2126-orm", 16599.570,-144980.500, 0.000
"2127", 16604.000,-144981.600, 0.000
"2129", 16611.500,-144983.200, 0.000
"2927a", 17485.277,-145147.475, 0.000
"2927b", 17484.570,-145147.264, 0.000
"2925a", 17497.564,-145151.187, 0.000
"2925b", 17497.229,-145151.114, 0.000
"2923a", 17499.939,-145154.332, 0.000
"2923b", 17500.122,-145154.366, 0.000
"2917a", 17511.201,-145156.322, 0.000
"2917b", 17516.401,-145149.783, 0.000
"2913a", 17527.487,-145159.842, 0.000
"2913b", 17527.085,-145159.754, 0.000
"2911a", 17532.102,-145161.064, 0.000
"2909a", 17540.777,-145159.259, 0.000
"2909b", 17540.623,-145159.221, 0.000
"2907a", 17551.992,-145160.843, 0.000
"2907b", 17550.023,-145160.655, 0.000
"2905a", 17559.466,-145164.456, 0.000
"2905b", 17557.844,-145164.098, 0.000
"2903a", 17561.127,-145163.945, 0.000
"2901a", 17573.812,-145169.258, 0.000
"2901b", 17573.400,-145169.167, 0.000
"2891a", 17597.687,-145174.224, 0.000
"2891b", 17597.483,-145174.172, 0.000
"2889a", 17601.559,-145175.346, 0.000
"2887a", 17613.827,-145171.843, 0.000
"2887b", 17613.585,-145171.788, 0.000
"2885a", 17617.628,-145178.258, 0.000
"2885b", 17617.263,-145178.198, 0.000
"2883a", 17623.600,-145177.878, 0.000
"2883b", 17623.237,-145177.808, 0.000
"2877a", 17630.008,-145180.623, 0.000
"2877b", 17629.855,-145180.581, 0.000


Dakle treba da se poređaju redovi po skupu znakova pod navodnicima na početku svakog reda.

U ovom programu mi se javljaju sva problema. Prvi je što ne znam da se oslobodim navodnika da mi ostanu čisti karakteri (tu spada i problem što ne znam koliko u kom redu zauzima karaktera to pod navodnicima, ali znam da uvek ide do zareza) i to što nisam nikada radio sortiranje, ni niza ni bilo čega!

Ako možete, molim vas da mi pomognete!

Pozdrav!
 
Odgovor na temu

vladab
Vladimir Bašanović
Beograd

Član broj: 9512
Poruke: 498
*.vdial.verat.net



Profil

icon Re: Formiranje ispravnog redosleda redova u datoteci!24.09.2004. u 21:17 - pre 238 meseci
1)Mozes da ucitavas string iz fajla u niz karaktera npr, ovako:

Code:
i:=1
while not eoln(fu) do
  begin
    read(fu,a[i]);
    i := i + 1;
  end;

Ovo ucitava ceo red i broji koliko imas karaktera, ali ti mozes da prilagodis uslove da ti cita samo izmedju navodnika. :O)

2)Sto se tice sortiranja mozes da poredis ASCII kodove ovih znakova.

PS fu : text;, a : array[1..100] of char;
PPS Tek sam sada primetio da ne znas ni jedan sort, pa ti preporucujem da pogledas bubble sort na googleu, posto sada nemam vremena da ti to objasnjavam.
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Formiranje ispravnog redosleda redova u datoteci!25.09.2004. u 00:23 - pre 238 meseci
Ovo bi trebalo da zavrsi posao...

Code:

type
  T = record
        sortString : String;
        fullString : String;
      end;

var
  SFile   : Text;
  SortStr : String;
  ArrNum  : Integer;
  FData   : Array[1..100] of T;
  C1      : Integer;

procedure SortArray;
var
  C1, C2 : Integer;
  tmp    : String;
begin             { 5, 4, 6, 1 }
  For C1 := 1 to ArrNum - 1 Do
    For C2 := C1 + 1 to ArrNum Do
      If FData[C2].sortString < FData[C1].sortString Then
      Begin
        tmp := FData[C1].sortString;
        FData[C1].sortString := FData[C2].sortString;
        FData[C2].sortString := tmp;
        tmp := FData[C1].fullString;
        FData[C1].fullString := FData[C2].fullString;
        FData[C2].fullString := tmp;
      end;
end;

begin
  Assign(SFile, 'C:\ulaz.txt');
  Reset(SFile);
    While not Eof(SFile) Do
    Begin
      Inc(ArrNum);
      ReadLn(SFile, FData[ArrNum].fullString);
      FData[ArrNum].sortString := Copy(FData[ArrNum].fullString, 2, Pos('",', FData[ArrNum].fullString) - 2);
    End;
  Close(SFile);

  SortArray;

  Assign(SFile, 'C:\izlaz.txt');
  Rewrite(SFile);
    For C1 := 1 to ArrNum Do
      WriteLn(SFile, FData[C1].fullString);
  Close(SFile);
end.
 
Odgovor na temu

del-boy
Bojan Delić
Beograd

Član broj: 9330
Poruke: 1089

Sajt: www.delic.in.rs


+21 Profil

icon Re: Formiranje ispravnog redosleda redova u datoteci!25.09.2004. u 12:15 - pre 238 meseci
Da, ovo završava posao, međutim jedini i glavni problem je što ne može da radi sa fajlovima koji imaju više od 100 redova, što je u praksi načešći slučaj. Ako stavim da je niz FData od 1000 članova, ne može da kompajlira jer je struktura prevelika, a u stvari bi mi trebalo da može da radi i sa preko 1000 redova (mislim da ne bi trebalo da bude više od 5000)!

Kako ovo da prevaziđem?
 
Odgovor na temu

filjo

Član broj: 17551
Poruke: 136
*.co.yu



+1 Profil

icon Re: Formiranje ispravnog redosleda redova u datoteci!25.09.2004. u 15:21 - pre 238 meseci
Ako hoces to da odradis na nekom programskom jeziku, onda te spasava jedini dinamicka alokacija memorije. Znaci za svaki slog posebno alociras memoriju i upisujes ga tamo. Za pristup podacima mozes da koristis niz pokazivaca na slogove, ili listu. Listu je malo teze sortirati (posto kako vidim ne znas ni jedan sort), ali uz pokazivace na slogove to mozes da odradis uz minimalnu izmenu gore navedenog programa.

Drugo resenje ti je puno brze.
-Udjes u access.
-Formiras novu bazu sa New
-Zatim File->Get external data->Import
-Odaberes Ulaz.txt, ili kako ti se fajl zove, ali mora da bude tekstualan
-Next, odaberes "comma" za delimiter, Next, Next, Next, Finish
-Podatci su ti u tabeli Ulaz, otvori je i radi sa njima sta hoces
 
Odgovor na temu

marcha
Nikola Marcic
Beograd/Leskovac

Član broj: 6454
Poruke: 108
*.17.eunet.yu

ICQ: 156892888


+1 Profil

icon Re: Formiranje ispravnog redosleda redova u datoteci!26.09.2004. u 08:45 - pre 238 meseci
Mislim da ce ti ova procedura biti od koristi:
Code:

procedure SortTxtFile(InputFile,OutputFile:TFileName);
const ch='"';
var MyList:TStringList;
    i:integer;
    s:string;
begin
 //Provera ulaznih parametara
  if not FileExists(InputFile)
  then raise Exception.CreateFmt('Datoteka "%s" ne postoji',[InputFile]);

  if OutputFile=''
  then raise Exception.Create('Nije odredjen naziv izlazne datoteke');

  MyList:=TStringList.Create;
  try
     //Ucitavam podatke iz ulazne datoteke
     MyList.LoadFromFile(InputFile);
     //Brisem navodnike
     for i:=0 to MyList.Count-1 do
      begin
        s:=MyList[i];
        while pos(ch,s)>0 do delete(s,pos(ch,s),1);
        MyList[i]:=s;
      end;
     //Sortira listu (TStrilgList koristi QuickSort)
     MyList.Sort;
     //Snimam rezultat u fajl
     MyList.SaveToFile(OutputFile);
   finally
     MyList.Free;
   end;
end;


Pozdrav,
Marcha
Marcha
-----------------------------------
Pretpostavka je majka zajeba.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Formiranje ispravnog redosleda redova u datoteci!

[ Pregleda: 2043 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.