首页 \ 问答 \ 如何避免硬编码文件路径?(How can I avoid hardcoding a file path?)

如何避免硬编码文件路径?(How can I avoid hardcoding a file path?)

我正在使用RStudio来编织.Rnw文件。 pdf 。 此.Rnw文件存储在git版本控制下的目录中。 该目录还包含项目的.RProj文件。

我与不了解.Rnw文件和git的第一件事的同事合作。 这些同事想要打开一个Word文件并跟踪改变他们的心。 所以我给人们他们想要的东西。

每个人都需要访问权限,因此将Word文件存储在像Box这样的云服务上是有道理的。 在过去,我在我的仓库中创建了一个子文件夹,我共享 - 保留根目录中的所有内容 - 但这次我需要将文件存储在其他人创建的共享文件夹中。 所以我的解决方案是将Word文件从这个共享目录复制到我的存储库。

技术方法

我不知道如何使这成为一个可重现的问题,但希望你能给我一些自由,因为我正努力使我的作品完全可重复;)

假设我的.Rnw文件存储在repoRoot/subfolder 。 由于knitr将工作目录更改为此.Rnw文件所在的subfolder ,因此第一个块将root.dir设置为项目根目录的一级。

<<knitr, include=FALSE>>=
  library(knitr)
  opts_knit$set(root.dir=normalizePath('../')) # go up 1 level
@

下一个块将Word文件从共享文件夹复制到我的git repo并运行分析文件。 共享目录路径硬编码到我的机器,这是我正在编写的问题,以帮助您解决问题。

file.copy(from='/Users/ericpgreen/Box Sync/Project/Paper/draft.docx',
          to='subfolder/draft.docx',  # my repo
          overwrite=TRUE)
source(scripts/analysis.R)  # generates objects we reference in the .docx file

添加\begin{document} ,我包含一个块,我将.docx文件转换为.txt ,然后将其重命名为.Rnw

# convert docx to txt
  system("textutil -convert txt 'subfolder/draft.docx'")
# rename txt to .Rnw
  file.rename('subfolder/draft.txt', 
              'subfolder/draft.Rnw')

下一个子块调用此.Rnw文件,该文件包含Word文件的文本,并引用通过\Sexpr{}包含的R对象:

<<include-draft, child='draft.Rnw', include=FALSE>>=
@

这对我来说很好。 每当我编织.Rnw文件时,它会抓取我的同事编辑过的最新版本的.docx文件(包括跟踪更改和注释),并在稍后未显示的步骤中将.pdf文件返回到共享文件夹。

要解决的问题

这个设置几乎满足了我的所有需求,只是初始的file.copy()命令被硬编码到我的机器上。 因此,如果我的小组中有人克隆了我的回购(例如,使用版本控制的研究助理),它将无法开箱即用。 在这种情况下,是否有硬编码的解决方法?


I am using RStudio to knit an .Rnw file to .pdf. This .Rnw file is stored in directory that is under git version control. This directory also contains a .RProj file for the project.

I collaborate with colleagues who don't know the first thing about .Rnw files and git. These colleagues want to open a Word file and track change their hearts out. So I give the people what they want.

Everyone needs access, so storing the Word file on a cloud service like Box makes sense. In the past I created a subfolder in my repo that I shared—keeping everything within the root directory—but this time around I needed to store the file in a shared folder that someone else created. So my solution was to copy the Word file from this shared directory to my repository.

Technical Approach

I don't know how to make this a reproducible problem, but hopefully you will give me some latitude since I'm trying to make my work fully reproducible ;)

Let's say that my .Rnw file is stored in repoRoot/subfolder. Since knitr changes the working directory to subfolder where this .Rnw file is located, the first chunk sets the root.dir one level up at the project root.

<<knitr, include=FALSE>>=
  library(knitr)
  opts_knit$set(root.dir=normalizePath('../')) # go up 1 level
@

The next chunk copies the Word file from the shared folder to my git repo and runs the analysis file. The shared directory path is hard coded to my machine, which is the problem I'm writing for your help solving.

file.copy(from='/Users/ericpgreen/Box Sync/Project/Paper/draft.docx',
          to='subfolder/draft.docx',  # my repo
          overwrite=TRUE)
source(scripts/analysis.R)  # generates objects we reference in the .docx file

After adding \begin{document}, I include a chunk where I convert the .docx file to .txt and then rename it to .Rnw.

# convert docx to txt
  system("textutil -convert txt 'subfolder/draft.docx'")
# rename txt to .Rnw
  file.rename('subfolder/draft.txt', 
              'subfolder/draft.Rnw')

The next child chunk calls this .Rnw file that contains the text of the Word file with references to R objects included through \Sexpr{}:

<<include-draft, child='draft.Rnw', include=FALSE>>=
@

This works just fine for me. Whenever I knit the .Rnw file it grabs the latest version of the .docx file that my colleagues have edited (complete with track changes and comments) and, in a later step not shown here, returns the .pdf file to the shared folder.

Problem to Solve

This setup meets almost every need for me, except that the initial file.copy() command is hard coded to my machine. So if someone in my group clones my repo (e.g., research assistants who DO use version control), it won't run out of the box. Is there a workaround to hard coding in this type of case?


原文:https://stackoverflow.com/questions/38649495
更新时间:2022-09-25 08:09

最满意答案

public class Worker{

  String name;
  int number;

  private static int totalCount=0;


  public Worker(String N){

     name=N;
     totalCount++;
     number = totalCount;
  }

  public String numberOfTime(){
      return name +", "+ number; 
  }
}

尝试这个

您没有为实例分配编号,它们的总计数应与分配给每个实例的编号分开


public class Worker{

  String name;
  int number;

  private static int totalCount=0;


  public Worker(String N){

     name=N;
     totalCount++;
     number = totalCount;
  }

  public String numberOfTime(){
      return name +", "+ number; 
  }
}

Try this

You are not assigning a number to the instances, Their total count should be separate from the number assigned to every instance

相关问答

更多

相关文章

更多

最新问答

更多
  • 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
  • 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
  • OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
  • 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
  • codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
  • 在计算机拍照在哪里进入
  • 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
  • No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
  • 单页应用程序:页面重新加载(Single Page Application: page reload)
  • 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
  • System.StackOverflow错误(System.StackOverflow error)
  • KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • C#类名中允许哪些字符?(What characters are allowed in C# class name?)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 在Angular 5中不是一个函数(is not a function in Angular 5)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • 常见的python rpc和cli接口(Common python rpc and cli interface)
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)