Happy to help! On Thursday, January 10, 2013 6:54:06 PM UTC-6, Andrew W wrote: > > Hello Brian, > > Thanks very much for sharing your script. It works a treat and saved me a > lot of time and confusion. > > Andrew > > On Wednesday, May 2, 2012 11:18:25 PM UTC+12, RAHUL PRIYADARSI wrote: >> >> Dear Mr.Brian, >> Thank you very much for you reply. >> " If you're worried about text alignment and other layout stuff, why not >> just use HTML templates" >> >> Well because I wish to get prints from them using dot matrix printer, >> which prints only txt files! >> But any way your response did help me very much. >> >> With Regards, >> rahulserver. >> >> On 1 May 2012 02:30, Brian M <[email protected]> wrote: >> >>> Yep, it is the web, you can't automatically write a file directly to the >>> user's computer (Holy security issues Batman!) but you can provide them the >>> prepared file as a download that they can then save to wherever they want. >>> Doesn't matter if it is CSV or TXT or HTML or PDF or RTF whatever. >>> Definitely note that reponse.header content-type and content-disposition >>> portion of my sample code above, that is what will help you cause the >>> user's browser to download the file with the correct name. There is some >>> StringIO stuff in there too which Khalil mentioned and you'd definitely >>> want for generating the files. >>> >>> As far as the formatting of strings you bet python & web2py can do it. >>> If you're worried about text alignment and other layout stuff, why not just >>> use HTML templates, that's what web2py is for. If you look around on this >>> list there is also some stuff on generating PDF reports - I think there is >>> a markmin to PDF converter available too. I believe that pyrtf is also in >>> web2py's contrib so you could use that to do Rich Text Format files. >>> Plenty of options out there for you. >>> >>> >>> On Monday, April 30, 2012 2:54:28 AM UTC-5, Khalil KHAMLICHI wrote: >>> >>>> Raul, when working with the web you always (most of the times) create >>>> the files server side and invite user to download it and save it to his >>>> file system, this sais you don't need to access the file system yourself, >>>> just invite the user to download your file and you are done. >>>> for csv versus txt files, they are both the same thing IF the user is >>>> not going to import them into some other software that needs only csv >>>> content, >>>> python has a module called StringIO, you can use it as a file and write >>>> to it mixed content : simple text and csv data. >>>> >>>> On Mon, Apr 30, 2012 at 6:03 AM, RAHUL PRIYADARSI <> wrote: >>>> >>>>> Dear All, >>>>> Thanks for your answers.But what I was looking for was,putting into >>>>> simple words,implementing a use case similar to the following "The system >>>>> maintains the data related to each transaction.Each transaction includes >>>>> the list of items demanded per transaction with each item belonging to a >>>>> category.The system also generates an aggregated report per transaction >>>>> as >>>>> well as an overall report of the total items belonging to each category >>>>> demanded.".Now "the report" here need not be in csv only.It may be txt >>>>> file.Since I am not sure as to whether is it possible to print formatted >>>>> strings(e.g. the string "report" printed right aligned in a total field >>>>> of >>>>> 15 characters,something likd printf(%15s)) in web2py,my question is that >>>>> how we do file IO in web2py. Can we generate a txt file in web2py. And >>>>> can >>>>> we print formatted strings to it? >>>>> Since the controller runs on server and my application would be >>>>> deployed in an intranet lan and it needs to generate files to be used in >>>>> local file system of the system on which the user will access the app , >>>>> where must this file IO code be written, in controller or view. >>>>> >>>>> >>>>> On 30 April 2012 07:35, Brian M <> wrote: >>>>> >>>>>> Yep, I've got a processing app that spits out all sorts of csv files >>>>>> based on data gathered from multiple sources. >>>>>> >>>>>> Here's a little helper function I use >>>>>> >>>>>> def csv_export(records, column_names, fields, mode = 'dal'): >>>>>> """Export DAL result set, list of dicts or list of lists to CSV >>>>>> stream for returning to user >>>>>> Arguments: >>>>>> records = the data to be returned >>>>>> column_names (list)= the column names/headings for the first row >>>>>> in the CSV file >>>>>> Example ['First Name', 'Last Name', 'Email'] >>>>>> fields (list) = the names of the fields (as they appear in >>>>>> records) in the order they >>>>>> should be in the CSV. Example ['f_name', >>>>>> 'l_name', 'email'] >>>>>> or ['table_a.f_name', 'table_a.l_name', >>>>>> 'table_b.email'] >>>>>> If mode = 'list' and your records are in the >>>>>> correct order then fields may be None >>>>>> otherwise use [1,3,0] if you list is in a >>>>>> different order >>>>>> mode (string) = what type of data is in records? 'dal' (Default), >>>>>> 'dict' or 'list' >>>>>> 'dal' if records came from a regular dal query >>>>>> (Default) >>>>>> 'dict' if records are a list of dicts (for >>>>>> example using db.executesql() with as_dict = True) >>>>>> 'list' if records are a list of lists/tuples (for >>>>>> example using db.executesql() with as_dict = False) >>>>>> >>>>>> """ >>>>>> >>>>>> #create fake file object >>>>>> import cStringIO >>>>>> file = cStringIO.StringIO() >>>>>> #setup csv writer >>>>>> import csv >>>>>> csv_file = csv.writer(file) >>>>>> #write first row withspecified column headings/names >>>>>> csv_file.writerow(column_**names) >>>>>> #which mode - dal or dict? >>>>>> if mode.lower() == 'dal' or mode.lower() == 'dict': >>>>>> for record in records: >>>>>> csv_file.writerow([record[**field] for field in fields]) >>>>>> elif mode.lower() == 'list': >>>>>> if fields == None: >>>>>> csv_file.writerows(records) >>>>>> else: >>>>>> for record in records: >>>>>> csv_file.writerow([record[**field] for field in >>>>>> fields]) >>>>>> return file >>>>>> >>>>>> >>>>>> >>>>>> Then in a controller you can have something like >>>>>> >>>>>> csv_stream = csv_export(processed_dataset, column_names, fields, >>>>>> mode = 'dict') >>>>>> response.headers['Content-**Type']='application/vnd.ms-**excel' >>>>>> response.headers['Content-**Disposition']='attachment; >>>>>> filename=data_for_%s.csv' % date.today() >>>>>> return csv_stream.getvalue() >>>>>> >>>>>> which will cause browser to download the csv file with your chosen >>>>>> filename >>>>>> >>>>>> you could also turn around and save the datafile to the filesystem if >>>>>> you wanted. >>>>>> >>>>>> Hope this helps! >>>>>> Brian >>>>>> >>>>>> >>>>>> On Saturday, April 28, 2012 5:20:15 AM UTC-5, rahulserver wrote: >>>>>>> >>>>>>> I wish to generate a few reports in csv or txt or other file formats >>>>>>> based on some database data maintained through a crud application. >>>>>>> Previously, it was done through an asp.net application with vb as >>>>>>> scripting language.But as I explored the wonderful capabilities of >>>>>>> web2py, >>>>>>> I have become a fan of this terrific framework. >>>>>>> Is it possible to do it in web2py. And if it is, then how and where >>>>>>> should the code be placed.In the view or model or controller? >>>>>>> >>>>>> >>>>> >>>> >>
--

