Flat file or plist?

My app requires a list of words for a dictionary. At various stages, the list may be transformed into a binary tree or words sorted by how many characters make up a specified set.
I've started with a flat file of initial words, coincidently sorted alphabetically. However, in the interest of simplicity, my gut feeling says to just go ahead and convert the list into a plist, and then just read it into an NSArray.
Then when it comes to needing a tree structure, to just add use simple indexes into the array in the remaining structured generated in the model portion of the program.
Is that the best way, or would keeping it as a simple flat file keep it simpler?
I'm leaning towards using a plist unless someone talks me out of it, or shows me a few lines of code which read a flat file into an NSArray of NSStrings or equivalent data. By the way, all the words in my dictionaries are all the same length, 5 chars, or 6 chars (each of 2 dictionaries so far). In case I can read n-byte records into a simple dynamic C array in one quick read. I know that would be the tightest memory structure. We have almost 10,000 5 character words and 17,000+ 6 character words.
Only one or the other will be in memory at the same time.

RayNewbie wrote:
The most natural use of a plist is to store a dictionary. Note the seamless interface between NSDictionary and its plist representation in a disk file (see initWithContentsOfFile: and writeToFile:atomically:). So if you already have your data in one or more dictionaries, the job is almost done.
I think I'll go with the plist.
So, the 2nd part of this question is, how to read the data and then pull out the words with unique letters efficiently. I'm sure there are several ways. For ease of programming, I chose to build a dictionary of the letters in the word and if there are N letters in the dictionary for an N letter word, they must be unique.
Actually after an different thread on SQLite, I decided to rewrite it all using NSSet instead of NSDictionary, and now have just 4 tables (NSSet words, NSSet secrets, NSArray allWords, and NSArray allSecrets). The sets are mutable as they are built from potentially multiple data files, although there is only one at the moment, and the arrays which once were mutable can be static, regular NSArrays.
Here's my new code:
//function for unique test
static NSMutableSet* letters = nil;
BOOL uniqueLetters(word)
NSString* word;
if ( !letters ) // first time here, create set
letters = [[NSMutableDictionary alloc] init];
if ( [letters count] ) // been here, want a fresh set, so remove everything
[letters removeAllObjects];
for ( int i = 0; i < [word length]; i++ ) {
NSString* letter = [word substringWithRange:NSMakeRange(i,1)];
[letters addObject:letter];
// if the number of entries in letters == word length there are no duplicates
return ( [letters count] == [word length] );
//loop processing array data in dictionary files to create one list/dictionary
NSArray* myWords = [wordFileData objectForKey:@"Words"];
[words addObjects:myWords]; // add all words from file
for (int i=0; i<[myWords count]; i++) {
NSString* myWord = [myWords objectAtIndex:i];
if ( myWord ) {
// see if it has unique letters so it can be a secret
if ( uniqueLetters(myWord) )
[secrets addObject:myWord]; // list
} // if myword
} // for i
// after processing all files
allWords = [words allObjects]; // all words, no duplicates
allSecrets = [secrets allObjects]; // all secrets, no duplicates

Similar Messages

  • How to create the Export Data and Import Data using flat file interface

    Hi,
    Request to let me know based on the requirement below on how to export and import data using flat file interface.....
    Please provide the steps involved for the same.......
    BW/BI - Recovery Process for SNP data. 
    For each SNP InfoProvider,
    create:
    1) Export Data:
    1.a)  Create an export data source, InfoPackage, comm structure, etc. necessary to create an ASCII fixed length flat file on the XI
    ctnhsappdata\iface\SCPI063\Out folder for each SNP InfoProvider. 
    1.b)  All fields in each InfoProvider should be exported and included in the flat file. 
    1.c)  A process chain should be created for each InfoProvider with a start event. 
    1.d)  If the file exists on the target drive it should be overwritten. 
    1.e)  The exported data file name should include the InfoProvider technical name.
    1.f)  Include APO Planning Version, Date of Planning Run, APO Location, Calendar Year/Month, Material and BW Plant as selection criteria.
    2) Import Data:
    2.a) Create a flat file source system InfoPackage, comm structure, etc. necessary to import ASCII fixed length flat files from the XI
    ctnhsappdata\iface\SCPI063\Out folder for each SNP InfoProvider.
    2.b)  All fields for each InfoProvider should be mapped and imported from the flat file.
    2.c)  A process chain should be created for each InfoProvider with a start event. 
    2.d)  The file should be archived in the
    ctnhsappdata\iface\SCPI063\Archive directory.  Each file name should have the date appended in YYYYMMDD format.  Each file should be deleted from the \Out directory after it is archived. 
    Thanks in advance.
    Tyson

    Here's some info on working with plists:
    http://developer.apple.com/documentation/Cocoa/Conceptual/PropertyLists/Introduc tion/chapter1_section1.html
    They can be edited with any text editor. Xcode provides a graphical editor for them - make sure to use the .plist extension so Xcode will recognize it.

  • To change "package" file format to "flat" files for iDisk

    First, let me thank Yvan Koenig for providing a great script to convert "Word2Pages"...
    There is a problem at present discussed on the MobileMe forum page, with files not uploading to iDisk using Finder. One problem is that whereas "flat" files load, "package" files do not. (There is a choice in the Pages Preferences for these options.) This limitation also applies to emailling files.
    I used Yvan's "Word2Pages" batch conversion script for hundreds of files which saved me days of work. However, to load these onto my iDisk I need to convert them to "flat" files.
    Please can I humbly ask him to write a similar script for converting files from "package2flat". I am not so advanced as he in computer literacy and would surely appreciate his help.
    Message was edited by: putnik

    Yvan,
    Thank you finding a solution to the default setting. I wonder how many Pages 09 files have been produced as packages with umpteen subfolders for things that will never be used. No wonder my Finder kept on crashing when I tried to upload to my iDisk.
    I have written a bug report to Apple via Pages so hope they will change the default setting for "Copy Audio and Movies to the Document".
    I am puzzled about your Word2Pages script still producing "package" files even after making the changes to default values that you describe. Could it be that the code is calling up old default values from somewhere else. There seems to be a plist in the Application folder and another in the User library.
    Is this the relevant piece of code?
    on getPlistValue(valName, default)
    local thePlist, u
    set thePlist to (path to preferences folder as Unicode text) & "com.apple.iWork." & theApp & ".plist"
    tell application "System Events"
    if exists file thePlist then
    tell contents of property list file thePlist
    try
    set u to (value of property list item valName) (* Unicode Text *)
    on error (* Here if Numbers never saved with the new preferences file. *)
    set u to default
    end try
    end tell -- to contents of…
    else (*Here if there is no preferences file. *)
    set u to default
    end if
    end tell -- to system events
    return u
    end getPlistValue
    Well I am trying to learn Applescript but not finding it easy.
    Message was edited by: putnik

  • Refreshing the data in a flat file

    Hi
    I am working on data integration.
    I need to fetch data from Oracle data base and then write it to a flat file.
    It is working fine now,but for the next fetch I don't need the old data to remain there in the file.The data should get refreshed and only the newly fetched data should be present.
    After the data is written to the flat file can i rename the file?
    I need the format of the file to be 'File_yyyyMMDDHHmmss.txt'.
    My final question is how should I FTP this to the target?
    Please help me on this as soon as possible since this is needed in an urgent part of the delivery.

    All you ask is achievable:
    1) The IKM SQL to file has a TRUNCATE option, which will if set to YES, will start from a clean file.
    2) You could rename the file after writing it, but why not just write it with that name? If you set the resource name to be a variable, (e.g. #MyProj.MyFilename), and be sure to set the variable in the package before executing your interface, you should be able to get the file you want. Otherwise, you can use the OdiFileMove tool in your package to rename the file.
    To set the name of the variable you can use a query on the database (if you are using Oracle, something like SELECT 'File_'||TOCHAR(SYSDATE) from DUAL.)
    3) ODI has ftp classes built in- you can find the doc under doc\webhelp\en\ref_jython\jyt_ex_ftp.htm
    Hope this helps
    Message was edited by:
    CTS

  • Loading multiple flat file at a time.

    hi experts,
    I am having 15 flat files with same data structure.so how do i load all the fileswith out creating 15 info packges .
    ( say all the files are on the desktop.)
    I had seen the option that ABAP code an be written in info package in extraction tab.
    Can any one share me the abap code
    Regards
    Laxman.

    You can write dynamic code using ABAP if your number of flat files are not fixed...but if you have to 15 flat files always just creating multiple infopackages.
    For code, you have to store file names/name pattern in some table and reading it at run time. You can use function modules starting with BAPI_IPAK* to create/change/start template IP like BAPI_IPAK_START. You can set IP parameters at run time using FM RSBATCH_MAINTAIN_PAR_SETTINGS.
    Kamaljeet

  • InfoSpoke Flat File Extract to Logical Filename

    I'm trying to extract data from an ODS to a flat file. So far, I've found that the InfoSpoke must write to the application server for large data volume. Also, in order for the InfoSpoke to transport properly, I must use logical filenames. I've attempted to implement the custom class and append structure as defined in the SAP document "How To... Extract Data with OPEN HUB to a Customer Defined Logical Filename". I'm getting an error when attempting to import the included transports (custom class code). It appears to be a syntax error. Has anyone encountered this, and, if so, how did you fix it?

    Hello.
    I'm getting a syntax error also.  I did not import the transport, but applied the notes thru the appendix.  When I modified the method "GET_OBJECT_REF_INT" in class CL_RSB_DEST as below, I get a syntax error on the "create object" statement.
        when rsbo_c_desttype_int-file_applsrv.
    *{   REPLACE        &$&$&$&$                                          1
    *\      data: l_r_file_applsrv type ref to cl_rsb_file_applsrv.
          data: l_r_file_applsrv type ref to zcl_rsb_file_logical.
    *}   REPLACE
          create object l_r_file_applsrv
            exporting i_dest    = n_dest
                      i_objvers = i_objvers
    Class CL_RSB_DEST,Method GET_OBJECT_REF_INT
    The obligatory parameter "I_S_VDEST" had no value assigned to it.

  • Dynamic file name from input payload (RFC 2 flat file)

    Hi,
    I have an RFC to flat file scenario. The output flat file has not an XML structure, it's just a plain text file generated with abap mapping.
    In my source interface (RFC), I have a field called <FILENAME>, I want to use the value of that field to create the target file using dynamic file name. But if  in variable substitution I use payload:ZRFC_NAME,1,FILENAME,1 It doesn't work because the dynamic variable substitution try to access to output payload, not the source one...
    What can I do?

    Hi Marshal,
           You can add a extra node to your target strucutre like
    FileName- Node
    --FileName - Element.
    do the mapping from the field filename of RFC to FileName field in u r target strucure. And use this  field path at Refrence in variable subtituion.
    In the Content converison add the Name & Values as below
    FileName.fileldNames -- FileName
    FileName.fieldFixedLengths -- 0
    FileName.fixedLengthTooShortHandling -- Cut
    So the extra field in u r target structure would not populate in u r target text file.
    Cheers
    Veera

  • Non English Charaters in Flat file(Note pad)

    Dear Friends,
    I have a flat file from presentation server which needs to be uploaded and do some validations on that file based on the data existing.
    I have some Russian language words in that file. E.g: "ОЩИ В ПОДГ". If this word exists in the file i need to get some other data from a database table. But when trying to check for the word, these characters are appearing as junk characters like ####&^^.
    I tried logging into RU language also, but still not working. And also tried changing the file as type Unicode, ASCII and also not worked.
    Please let me know how to get identify these words to see the exact russian words.
    Thanks for your help.
    Srinivas.

    Hello,
    Is your file .txt file.If yes,while saving it gives a pop up for file name.There you have option for encoding, there select encoding as
    Unicode and try to upload.
    It worked for me.I tried with the data provided by you.
    data:begin of it_tab occurs 0,
          val type string,
         end of it_tab.
    CALL FUNCTION 'GUI_UPLOAD'
      EXPORTING
        filename                      = 'C:\Documents and Settings\xxx\Desktop\SDN1.txt'
      FILETYPE                      = 'ASC'
      HAS_FIELD_SEPARATOR           = ' '
      HEADER_LENGTH                 = 0
      READ_BY_LINE                  = 'X'
      DAT_MODE                      = ' '
      CODEPAGE                      = ' '
      IGNORE_CERR                   = ABAP_TRUE
      REPLACEMENT                   = '#'
      CHECK_BOM                     = ' '
      VIRUS_SCAN_PROFILE            = VIRUS_SCAN_PROFILE
      NO_AUTH_CHECK                 = ' '
    IMPORTING
      FILELENGTH                    = FILELENGTH
      HEADER                        = HEADER
      TABLES
        data_tab                      = it_tab
    EXCEPTIONS
       FILE_OPEN_ERROR               = 1
       FILE_READ_ERROR               = 2
       NO_BATCH                      = 3
       GUI_REFUSE_FILETRANSFER       = 4
       INVALID_TYPE                  = 5
       NO_AUTHORITY                  = 6
       UNKNOWN_ERROR                 = 7
       BAD_DATA_FORMAT               = 8
       HEADER_NOT_ALLOWED            = 9
       SEPARATOR_NOT_ALLOWED         = 10
       HEADER_TOO_LONG               = 11
       UNKNOWN_DP_ERROR              = 12
       ACCESS_DENIED                 = 13
       DP_OUT_OF_MEMORY              = 14
       DISK_FULL                     = 15
       DP_TIMEOUT                    = 16
       OTHERS                        = 17
    IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    Thanks.
    Ramya.

  • Error while uploading data from a flat file to the hierarchy

    Hi guys,
    after i upload data from a flat file to the hierarchy, i get a error message "Please select a valid info object" am loading data using PSA, having activated all external chars still get the problem..some help on this please..
    regards
    Sri

    there is o relation of infoobject name in flat file and infoobjet name at BW side.
    please check with the object in the BW and their lengths and type of the object and check your flat file weather u have the same type there,
    now check the sequence of the objects in the transfer rules  and activate them.
    there u go.

  • How can we search data in flat files

    I need to search for a particular list of account numbers whose data is stored in a flat file. Each line represents data for one account number. I also need to put all data for the searched account number into a new flat file.
    Can anyone help me on this??
    Thanks in advance....

    I m very new to java programming and dont know what
    to write in the code i.e are there any available
    methods to do so..or do we need to write a search
    logic..That's correct you have to implemetn the logic, but it's pretty easy. Just a loop which reads each line from the file, and looks for the information.
    Kaj

  • How can we append data in existing flat file

    how can we append data to a existing flat file (Text file).

    just fill the itab from data which suppose to append to text file.than read text file from GUI_UPLOAD and loop on itab and with the use of read statements you may append the data.

  • Can we load data in variable screen from flat file?

    Hello all,
    One of my user once asked me she needs to run a report for some employees, i said you can just type that in employee varaible input box.
    She said I need to run the report and I need it for 120 employees, she has the employee numbers in excel sheet.
    What is the best way of doing this if any ?
    Thanks

    This can be done from a flat file, which has list of all values.
    If you are using Bex 3.5, then we have an icon in variable screen bottom right to upload values, where we can specify the path of the file.
    Naveen.a

  • HUGE amount of data in flat file every day to external system

    Hello,
    i have to develop several programs to export all tables data in a flat file for external system ( EG. WEB).
    I have some worries like if is possible by SAP export all KNA1 data that contains a lot of data in a flat file using the extraction:
    SELECT * FROM KNA1 ITO TABLE TB_KNA1.
    I need some advices about these kind of huge extractions.
    I also have to extract from some tables, only the data changes, new record, and deleted records; to do this I thought of developing a program that every day extract all data from MARA and save the extraction in a custom table like MARA; the next day when the programs runs compare all data of the new extraction with the old extraction in the ZMARA table to understand the datachanges, new records or deleted record.. It's a righ approach? Can have problems with performance? Do you now other methods?
    Thanks a lot!
    Bye

    you should not have a problem with this simple approach, transferring each row to the output file rather than reading all data into an internal table first:
    open dataset <file> ...
    select * from kna1 into wa_kna1
      transfer wa_kna1 to <file>
    endselect
    close dataset <file>
    Thomas

  • What is the diff b/w flat file and legacy system?

    Hi everyone,
           when v say v r working on scenario FILE to FILE? which format of file r v usually working on? and what is the diff b/w flat file and legacy system?
    thanx

    Hi,
    <i>when v say v r working on scenario FILE to FILE? which format of file r v usually working on?</i>
    >>>Many a times it will be a Flat file with CSV format,Tab delimited format, fixedlength fields.
    <i>what is the diff b/w flat file and legacy system?</i>
    >>>We can not differeniate like this..
    Flat file may come from any systems, it may be live system or legacy system.
    Legacy system- is something like old, or past one. If you talk about SAP , then older versions of SAP can be  called as a legacy system.
    So it may be a file system, or any system which is old version but it doesnot mean it is not in use,
    Regards,
    Moorthy

  • How to Add Header and Footer in Flat file

    HI All,
    I am using ODI 11g.
    MY interface is populating data from joining to 2 tables through sql query and Loads in to Flat file.
    But i need to add Header and Footer in the Flat file.
    In the below 3 lines
    The 1st line is header ....2nd line is Data ....3rd line is Footer.
    Any ideas how to work on this.
    HSB9KT.KTPRTO.EBSDATA.D0000000 20120626020636
    CFFE00263 SOLGSR014991340000527894536058173880207SOLNE06242012072420120000009048382650000247MRS
    T00000000000000000000
    Thanks,
    Lony

    Hi Drieux,
    i am able to add Header and Footer in this.
    But i want the header like Its like HSB9KT.KTPRTO.EBSDATA.D0000000 || SYSDATE (YYYYMMDDHHMMSS)
    In my Out put i only see header as HSB9KT.KTPRTO.EBSDATA.D0000000 .
    I have added a Variable where i am using SELECT to_char(sysdate,'YYYYMMDDHHMMSS') FROM DUAL query.
    create header (HSB9KT.KTPRTO.EBSDATA.D0000000 #v_DATE)
    /*$$SNPS_START_KEYSNP$CRDWG_TABLESNP$CRTABLE_NAME=FFT_SOLSNP$CRLOAD_FILE=/home/tarak/FFT_SOL.datSNP$CRFILE_FORMAT=FSNP$CRFILE_SEP_FIELD=0x0009SNP$CRFILE_SEP_LINE=0x000ASNP$CRFILE_FIRST_ROW=0SNP$CRFILE_ENC_FIELD=SNP$CRFILE_DEC_SEP=SNP$CRSNP$CRDWG_COLSNP$CRCOL_NAME=descrSNP$CRTYPE_NAME=STRINGSNP$CRLINE_OFFSET=1SNP$CRLENGTH=994SNP$CRPRECISION=994SNP$CR$$SNPS_END_KEY*/
    Any idea why this sysdate part is not showing in Header.

Maybe you are looking for