nu vil jeg gerne lave et program der kan splitte tekstfilen op, i dette her eks. i 3 filer, som får navn efter den tekst der står bag efter O\'et (feks test10) og hvor jeg selv kan bestemme hvor jeg vil gemme filerne.
var FileName : String; FileActive : Boolean; Line : String; InputFile: File of Text; OutputFile: File of Text; begin FileActive := False; AssignFile(InputFile, \'NavnetPåInput-file.txt\'); Reset(InputFile); While not EOF(InputFile) do begin ReadLn(InputFile, Line); if (Length(Line) > 0) and (Line[1] = \'O\') then begin If FileActive then begin CloseFile(OutputFile); FileActive := False; end; if Length(Line) > 2 then begin FileName := Copy(Line, 2, Length(Line)-1); //evt: FileName := FileName + \'.TXT\'; AssignFile(OutputFile, FileName); ReWrite(OutputFile); FileActive := True; end; end else begin if FileActive then begin WriteLn(OutputFile, Line); end; end; end; end;
hej pellelil jeg skal lige prøve dit eks. men jeg vil lige høre om det er muligt at programmet selv vælger at åbne den nyeste fil der er i mappen (f.eks målt på klokken)
jeg skal også lige høre om hvor din kode skal ligge, er det på en knap eller er det på formens onactivate Hilsen anders
Hvis den skal åbne den seneste fil så skal du til at kigge på noget \"FindFirst\" / \"FindNext\" (prøve at kigge på det i hjælpen). Hvis du ikke bliver klogere så har du her en kode stump fra et af mine programmer (det konvertere automatisk alle BMP/TIF filer til JPG). For hver fil den finder kalder den \"ProcessBMPfile\", som er den rutine der fysisk konvertere filen (så fremt denne er en BMP eller TIF). Hvis den i stedet (for en fil) \"finder\" en folder, så kalder ScanTree sig selv rekursiv således at den også kigger i under-mapper: <SNIP> Procedure ScanTree(szFolder : String); var szUNCfolder : String; lExclude : Boolean; iIdx : Integer; VSearchRec : TSearchRec; iRes : integer; iFileAttrs : Integer; szFileName : String; begin //--- Check if Poll is running --- if not(FormMain.lRunning) then Exit; //--- Check if folder is to be Excluded --- szUNCfolder := ExpandUNCFileName(szFolder); lExclude := False; if FccRegDb.ExcludeFolders.Count > 0 then begin for iIdx := 0 to FccRegDb.ExcludeFolders.Count-1 do begin if pos(AnsiUpperCase(ExpandUNCFileName(FccRegDb.ExcludeFolders.Strings[iIdx])),AnsiUpperCase(szUNCfolder)) > 0 then lExclude := True; end; end; if lExclude then Exit; //--- Proceed looking for files and sub-folders --- iFileAttrs := faDirectory{ or faAnyFile}; szFileName := szUNCfolder; if (CopyLast(szFileName,1) <> \'\\\') then szFileName := szFileName + \'\\\'; szFileName := szFileName + \'*.*\'; if FindFirst(szFileName, faAnyFile, VSearchRec) = 0 then begin szFileName := szUNCfolder; if (CopyLast(szFileName,1) <> \'\\\') then szFileName := szFileName + \'\\\'; szFileName := szFileName + VSearchRec.Name; if (CopyLast(VSearchRec.Name,1) <> \'.\') then begin if ((VSearchRec.Attr and faDirectory) = faDirectory) then ScanTree(szFileName) else ProcessBMPfile(szFileName); end; while (FindNext(VSearchRec) = 0) and (FormMain.lRunning) do begin Application.ProcessMessages; szFileName := szUNCfolder; if (CopyLast(szFileName,1) <> \'\\\') then szFileName := szFileName + \'\\\'; szFileName := szFileName + VSearchRec.Name; if (CopyLast(VSearchRec.Name,1) <> \'.\') then begin if ((VSearchRec.Attr and faDirectory) = faDirectory) then ScanTree(szFileName) else ProcessBMPfile(szFileName); end; end; end; FindClose(VSearchRec); end; </SNIP>
Med hensyn til om min kode skal udføres på det ene eller det andet tidspunkt kan jeg ikke svare på (det burde du vide) - jeg håber at du ved hvordan din egen applikation skal udføres !?).
som du kan se så læser dit program ikke den første og den sidste linje ,kan du få det til at læse dem?
som jeg også skrev i starten så vil jeg gerne selv kunne bestemme hvovr jeg gemmer filerne henne, kan det ikke også lade sig gøre.
du skriver at :
\" Med hensyn til om min kode skal udføres på det ene eller det andet tidspunkt kan jeg ikke svare på (det burde du vide) - jeg håber at du ved hvordan din egen applikation skal udføres !?). \"
jeg tror at du misforstår mig ,det som jeg gerne ville var at programmet selv fandt den nyeste fil og læste i den, således at man var fri for at bruge en OpenDialogBox.
Det var med fuld overlæg at jeg ikke skrive den første linie (den der indeholderO\'et), men det gør den så nu: <SNIP> var FileName : String; FileActive : Boolean; Line : String; InputFile: File of Text; OutputFile: File of Text; begin FileActive := False; AssignFile(InputFile, \'NavnetPåInput-file.txt\'); Reset(InputFile); While not EOF(InputFile) do begin ReadLn(InputFile, Line); if (Length(Line) > 0) and (Line[1] = \'O\') then begin If FileActive then begin CloseFile(OutputFile); FileActive := False; end; if Length(Line) > 2 then begin FileName := Copy(Line, 2, Length(Line)-1); //evt: FileName := FileName + \'.TXT\'; AssignFile(OutputFile, FileName); ReWrite(OutputFile); WriteLn(OutputFile, Line); //*** Ny linie *** FileActive := True; end; end else begin if FileActive then begin WriteLn(OutputFile, Line); end; end; end; if FileActive then CloseFile(OutputFile); // *** Ny Linie *** end; </SNIP>
Jeg kan ikke se hvorfor den ikke skulle skrive den sidste linie. Jeg \"glemte\" at lukke den sidst åbnede fil, måske dette kunne få den sidste linie til at forsvinde, men dette skulle ikke længere være problemet.
Med hensyn til hvor du skal gemme filen så skal du selvfølgelig bare sætte et sti-navn foran det navn der læses ud fra din O-værdi (hvor svært ka\' det være): <SNIP> FileName := Copy(Line, 2, Length(Line)-1); FileName := \'C:\\En\\Eller\\Anden\\Folder\\\' + FileName + \'.TXT\'; </SNIP>
Nej jeg misforstod dig ikke. Med \"FindFirst\" / \"FindNext\" kan du løbe gennem et \"direktory\" og finde den fil du mener opfylder dine betingelser for at være den rigtige. Hvis programmet ikke skal vises en dialog hvor brugeren skal tage stilling til noget, så kan du evt. putte koden ind i \"OnCreate\". Du kan lade dit hoved program generere en Form hvortil du tilknytter denne kode. Hoved programmet skal således blot \"create\" dene form, men behøver ikke at lave en Show på denne.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.