Javad,

After reading the exchanges, I conclude you are asking a somewhat different 
question than some of us expected and I see some have zoomed in on what you 
seem to want.

You seem to want to make a very focused change and save the results to be as 
identical as what you started with. You also note you really have no idea about 
the process that created the file or uses it so it is hard to know if just 
changing parts results in a valid file.

So maybe this looks like not one file but three files. You seem to have a 
header region of N lines you want kept intact but also placed in the output 
untouched. You seem to have a few lines at the end you also seem to want to 
leave untouched. You have lots of lines in the middle you want treated as if it 
contains multiple columns of data in some format that looks like it is 
whitespace-separated, or maybe tabs.

And I think you want to do this transformation perhaps only once so a general 
purpose solution is not required.

So how about you get your favorite text editor or tool and extract the first N 
lines from the file and place it in a file called HEADER. You may also then 
delete it from a copy of the original file if you wish.

Similarly, extract the last lines you want to keep from the file and place it 
in a file called FOOTER.

What is left behind in a copy of the file should then be something people here 
might easily work with. You can use one of many methods as you wish to read the 
data into some kind of data.frame and supply names for the columns and 
whatever. You can make your changes to what seems like one column. You can save 
the output conceptually to use the same format as the input and place it in a 
file called NEW_DATA.

Note no actual files are necessarily needed but conceptually you now have some 
text in places called HEADER, NEW_DATA and FOOTER and you can combine them 
carefully (as in no blank lines or two lines concatenated without a newline) 
and get a new output file that should look like the input.

If your data format in the middle section uses something like a tab, this 
should work. If it uses whitespace and perhaps a fixed-width per line, you have 
an issue to deal with if your changes need more room than is available or need 
adjustment to calculate how many spaces to remove or add to center or line up 
the columns visible.

I will end by saying some others have offered variations that are probably just 
as reasonable. The problem is we may suggest you skip the first lines and it 
turns out you want to preserve them. Most R functions and packages I know about 
have no interest in preserving what effectively are often just comments but it 
seems easy enough to do. Your lines at the end are a bigger problem if you use 
standard commands to read in the data BECAUSE many such programs do a 
look-ahead at perhaps the first thousand lines to try to determine the number 
of columns and the type of each. Your extra lines at the end may perturb that 
and there may be weird results in your data at the end or even things like an 
integer column being considered to be character.



-----Original Message-----
From: R-help <r-help-boun...@r-project.org> On Behalf Of javad bayat
Sent: Thursday, September 22, 2022 6:35 AM
To: Rui Barradas <ruipbarra...@sapo.pt>
Cc: R-help@r-project.org
Subject: Re: [R] Write text file in Fortran format

These 2 lines were at the end of the text file, which I have attached but I had 
removed them to read the text file in R.
Just like the first 8 line that start with asterisk (*).






On Thu, 22 Sep 2022, 12:21 Rui Barradas, <ruipbarra...@sapo.pt> wrote:

> Hello,
>
> Are those lines at the begining of the file?
>
> Rui Barradas
>
> Às 06:44 de 22/09/2022, javad bayat escreveu:
> > Dear all; Many thanks for your useful comments and codes.
> > I tried both Rui's and Jim's codes.
> > Jim's codes gave an error as below:
> > "Error in substr(inputline, 1, begincol3 - 1) :
> >    object 'inputline' not found"
> > I don't know what's wrong.
> > The Rui's codes worked correctly for the attached file. But I have 
> > edited that file and removed 2 last lines from the file because I 
> > could not read it into R.
> > These 2 lines were:
> > "
> > ** CONCUNIT ug/m^3
> > ** DEPUNIT g/m^2
> > "
> > When I tried to run the code for my file that has these 2 lines at 
> > the
> end,
> > it gave me this error:
> > "
> >> df1 <- read.table(text = txt_table)
> > Error in read.table(text = txt_table) : no lines available in input 
> > "
> > The codes before the "df1 <- read.table(text = txt_table)" were run 
> > correctly.
> > Sincerely
> >
> >
> >
> > On Thu, Sep 22, 2022 at 6:58 AM javad bayat <j.bayat...@gmail.com>
> wrote:
> >
> >> Dear all;
> >> I apologise, I didn't know that I have to cc the list.
> >> Thank you Mr Rui for reminding me.
> >> Let me clarify more.
> >> I have no knowledge of the FORTRAN language. The text file that has 
> >> been attached is a model's output file and I know that the format 
> >> is in
> FORTRAN.
> >> I want to write a text file exactly similar to the attached text 
> >> file
> using
> >> R programming.
> >> The steps below explain my goal:
> >> 1- Read the text file without the first 8 and last 2 rows as a
> dataframe.
> >> Maybe I have removed the last 2 lines, but at the end it had 2 
> >> lines similar the first 8 lines which starts with asterisk.
> >> 2- Double the 3rd column values (or multiply by specific number).
> >> 3- Insert the removed first 8 lines of the original text file as 
> >> header
> in
> >> the dataframe.
> >> 4- Insert the removed last 2 lines of the original text file at the 
> >> end
> of
> >> dataframe.
> >> 5- Write the dataframe as a new text file exactly similar to the
> original
> >> text file.
> >>
> >> I have used excel but when I save it as text file, the format 
> >> changes
> and
> >> is not similar to the attached text file.
> >> I will try all your codes in a few hours, cause I am out of office.
> >> Sincerely yours.
> >>
> >>
> >>
> >> On Thu, 22 Sep 2022, 04:20 Richard O'Keefe, <rao...@gmail.com> wrote:
> >>
> >>> Oh, so you want to WRITE a file *like* that.
> >>> Use ?sprintf.
> >>> (3(1X,F13.5),3(1X,F8.2),3X,A5,2X,A8,2X,A5,5X,A8,2X,I8)
> >>>
> >>> Fortran sprintf
> >>> 1X      a space
> >>> 3X      3 spaces
> >>> F13.5   %13.5f
> >>> F8.2    %8.2f
> >>> A5      %5s
> >>> A8      %8s
> >>> I8      %8d
> >>> 3(...)  the translation of ... written 3 times
> >>>
> >>> We can simplify 1X,F13.5 to F14.5
> >>> Here's the sprintf() equivalent of the Fortran format, except 
> >>> you'll need to change the dots to spaces.
> >>>
> >>> "%14.5f%14.5f%14.5f%9.2f%9.2f%9.2f...%5s..%8s..%5s.....%8s%10d\n
> >>>
> >>> On Thu, 22 Sept 2022 at 04:17, javad bayat <j.bayat...@gmail.com>
> wrote:
> >>>
> >>>> Dear Rasmus;
> >>>> I have no knowledge of the FORTRAN language. The text file that 
> >>>> has
> been
> >>>> attached is a model's output file and I know that the format is 
> >>>> in FORTRAN.
> >>>> I want to write a text file exactly similar to the attached text 
> >>>> file using R programming.
> >>>> The steps below explain my goal:
> >>>> 1- Read the text file without the first 8 and last 2 rows as a
> dataframe.
> >>>> 2- Double the 3rd column values (or multiply by specific number).
> >>>> 3- Insert the removed first 8 rows of the original text file as
> header in
> >>>> the dataframe.
> >>>> 4- Insert the removed last 2 rows of the original text file at 
> >>>> the
> end of
> >>>> dataframe.
> >>>> 5- Write the dataframe as a new text file exactly similar to the
> original
> >>>> text file.
> >>>>
> >>>> I have used excel but when I save it as text file, the format 
> >>>> changes
> and
> >>>> is not similar to the attached text file.
> >>>> Sincerely
> >>>>
> >>>> On Wed, 21 Sep 2022, 18:17 Rasmus Liland, <j...@posteo.no> wrote:
> >>>>
> >>>>> Dear Javad,
> >>>>>
> >>>>> Perhaps you were looking to read the table in Air.txt (is this 
> >>>>> Fortran
> >>>>> format?) into R?
> >>>>>
> >>>>>          b <- readLines("Air.txt")  # The text MIME attachment
> w/Mailman
> >>>>> footer ...
> >>>>>          b <- b[1:(which(b=="")-1)]  # Remove the odd Mailman 
> >>>>> footer
> (at
> >>>>> end of df)
> >>>>>          idx <- max(grep("^\\*", b))+1  # Start of df after 
> >>>>> header
> uline
> >>>>>          header <- tolower(strsplit(gsub("  +", "_", gsub("\\*", 
> >>>>> "", b[idx-2])), "_")[[1]])
> >>>>>          b <- read.table(text=b[-(1:idx)], header=F)
> >>>>>          colnames(b) <- header[header!=""]
> >>>>>          b <- b[,sapply(b, \(i) length(unique(i)))>1]  # Remove
> constant
> >>>>> cols
> >>>>>
> >>>>> str(b)
> >>>>>
> >>>>>          'data.frame':   31324 obs. of  6 variables:
> >>>>>           $ x           : num  583500 584000 584500 585000 585500 ...
> >>>>>           $ y           : num  3018700 3018700 3018700 3018700
> 3018700
> >>>> ...
> >>>>>           $ average conc: num  32.8 33.1 33.4 33.5 33.6 ...
> >>>>>           $ zelev       : num  0 0 0 0 0 0 0 0 0 0 ...
> >>>>>           $ zhill       : num  0 0 0 0 0 0 0 0 0 0 ...
> >>>>>           $ date(conc)  : int  16101706 16101706 16101706 
> >>>>> 16101706
> >>>> 16101706
> >>>>> ...
> >>>>>
> >>>>> Best,
> >>>>> Rasmus
> >>>>>
> >>>>> ______________________________________________
> >>>>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, 
> >>>>> see https://stat.ethz.ch/mailman/listinfo/r-help
> >>>>> PLEASE do read the posting guide 
> >>>>> http://www.R-project.org/posting-guide.html
> >>>>> and provide commented, minimal, self-contained, reproducible code.
> >>>>>
> >>>>
> >>>>          [[alternative HTML version deleted]]
> >>>>
> >>>> ______________________________________________
> >>>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 
> >>>> https://stat.ethz.ch/mailman/listinfo/r-help
> >>>> PLEASE do read the posting guide
> >>>> http://www.R-project.org/posting-guide.html
> >>>> and provide commented, minimal, self-contained, reproducible code.
> >>>>
> >>>
> >
>

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to